JavaScript. Подробное руководство, 6-е издание, стр. 141
Обратите внимание, что альтернативы обрабатываются слева направо до тех пор, пока не будет найдено соответствие. При обнаружении совпадения с левой альтернативой правая игнорируется, даже если можно добиться «лучшего» соответствия. Поэтому, когда к строке «
<b>аЬ</b><b>/а|аЬ/</b>Круглые скобки имеют в регулярных выражениях несколько значений. Одно из них - группировка отдельных элементов в одно подвыражение, так что элементы при использовании специальных символов
<b>|, *, +, ?</b><b>/java(script)?/</b><b>/(ab|cd)+|ef)/</b><b>ef</b><b>аЬ</b><b>cd</b>Другим применением скобок в регулярных выражениях является определение подшаблонов внутри шаблона. Когда в целевой строке найдено совпадение с регулярным выражением, можно извлечь часть целевой строки, соответствующую любому конкретному подшаблону, заключенному в скобки. (Мы увидим, как получить эти подстроки, далее в этой главе.) Предположим, что требуется отыскать одну или более букв в нижнем регистре, за которыми следует одна или несколько цифр. Для этого можно воспользоваться шаблоном
<b>/[a-z]+\d+/.</b><b>(/[a-z]+(\d+)/)</b>С этим связано еще одно применение подвыражений в скобках, позволяющее ссылаться на подвыражения из предыдущей части того же регулярного выражения. Это достигается путем указания одной или нескольких цифр после символа
<b>\</b><b>\1</b><b>\3</b><b>([Ss]cript)</b><b>\2</b><b>/([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/</b>Ссылка на предыдущее подвыражение указывает не на шаблон этого подвыражения, а на найденный текст, соответствующий этому шаблону. Поэтому ссылки могут использоваться для наложения ограничения, выбирающего части строки, содержащие точно такие же символы. Например, следующее регулярное выражение соответствует нулю или более символам внутри одинарных или двойных кавычек. Однако оно не требует, чтобы открывающие и закрывающие кавычки соответствовали друг другу (т. е. чтобы обе кавычки были одинарными или двойными):
<b>/['"][~'"]*['"]/</b>Соответствия кавычек мы можем потребовать посредством такой ссылки:
<b>/(['"])[~'"]*\1/</b>Здесь
<b>\1</b><b>/(['"])[~\1]*\1/</b>Далее в этой главе мы увидим, что этот вид ссылок на подвыражения представляет собой мощное средство использования регулярных выражений в операциях поиска с заменой.
Возможна также группировка элементов в регулярном выражении без создания нумерованной ссылки на эти элементы. Вместо простой группировки элементов между
<b>(</b><b>)</b><b>(?:</b><b>)</b><b>/([Jj]ava(?:[Ssjcript)?)\sis\s(fun\w*)/</b>Здесь подвыражение
<b>(?:[Ss]cript)</b><b>(fun\w*).</b>В табл. 10.4 приводится перечень операторов выбора из альтернатив, группировки и ссылки в регулярных выражениях.

10.1.5. Указание позиции соответствия
Как описывалось ранее, многие элементы регулярного выражения соответствуют одному символу в строке. Например,
<b>\s</b><b>\b</b><b>\w</b><b>\W</b>Такие элементы, как
<b>\b</b><b>~</b><b>$</b>Например, слово «
<b>JavaScript</b><b>/~JavaScript$/</b><b>Java</b><b>JavaScript</b><b>/\sJava\s/</b><b>\s</b><b>\b</b><b>/\b Java\b/</b><b>\В</b>