Использование совпадений подстрок в скобках
Использование совпадений подстрок в скобках
Включение скобок в патэрн регулярного выражения вызывает запоминание соответствующего подсовпадения. Например, /a(b)c/ совпадает с символами 'abc' и запоминает 'b'. Для последующего вызова этих запомненных подсовпадений используйте свойства $1, ..., $9 объекта RegExp или элементы [1], ..., [n] объекта Array.
Количество подстрок в скобках не ограничено. Предопределённый объект RegExp хранит последние 9 подстрок, а массив содержит всё, что найдено. Следующие примеры иллюстрируют использование совпадений подстрок в скобках.
Пример 1. Следующий скрипт использует метод replace для переключения слов в строке. Для замещающего текста скрипт использует значения свойств $1 и $2.
<SCRIPT LANGUAGE="JavaScript1.2">
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr = str.replace(re, "$2, $1");
document.write(newstr)
</SCRIPT>
Будет выведено "Smith, John".
Пример 2.
В следующем примере RegExp.input устанавливается событием Change. В функции getInfo метод exec использует значение RegExp.input в качестве аргумента. Заметьте, что RegExp обязан быть присоединён как префикс к его свойствам $ (поскольку они появляются вне замещающей строки). (Пример 3 это более эффективный, хотя, может быть, и более завуалированный способ сделать то же самое.)
<HTML><SCRIPT LANGUAGE="JavaScript1.2">
function getInfo(){
re = /(\w+)\s(\d+)/
re.exec();
window.alert(RegExp.$1 + ", your age is " + RegExp.$2);
}
</SCRIPT>Enter your first name and your age, and then press Enter.<FORM>
<INPUT TYPE="text" NAME="NameAge" onChange="getInfo(this);">
</FORM></HTML>
Пример 3.
Это пример похож на Пример 2. Но вместо использования RegExp.$1 и RegExp.$2 этот пример создаёт массив и использует a[1] и a[2]. Здесь используется также сокращённая нотация для метода exec.
<HTML><SCRIPT LANGUAGE="JavaScript1.2">
function getInfo(){
a = /(\w+)\s(\d+)/();
window.alert(a[1] + ", your age is " + a[2]);
}
</SCRIPT>Enter your first name and your age, and then press Enter.<FORM>
<INPUT TYPE="text" NAME="NameAge" onChange="getInfo(this);">
</FORM></HTML>