Создание регулярного выражения

Регулярное выражение описывает одну или несколько строк, по которым выполняется сопоставление при поиске в тексте. Регулярное выражение служит в качестве шаблона символов для сравнения с текстом, в котором выполняется поиск.

Построение регулярных выражений весьма похоже на создание арифметических выражений. Малые выражения с помощью различных метасимволов и операторов объединяются в более крупные.

Компонентами регулярного выражения могут быть отдельные символы, наборы символов, диапазоны символов или варианты выбора между символами. Компонентами могут также быть любые сочетания этих компонентов.

Построение регулярного выражения

Регулярное выражение строится путем помещения различных компонентов выражения между парой разделителей. В JScript разделители представляют собой пару косых черт (/), как показано в следующем примере.

/expression/

Примеры регулярных выражений

Следующая таблица содержит примеры типичных регулярных выражений.

Регулярное выражение

Описание

/^\s*$/

Соответствует пустой строке

/\d{2}-\d{5}/

Соответствует номеру идентификатора, состоящему из двух цифр, дефиса и пяти дополнительных цифр.

/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/

Соответствует HTML-тегу.

Обычные знаки

Самой простой формой регулярного выражения является один обычный символ, сравниваемый со строкой, в которой ведется поиск. Например, односимвольное регулярное выражение A сопоставляется с буквой "A" каждый раз, когда она появляется в строке, в которой ведется поиск.

Ниже приведено несколько примеров односимвольных регулярных выражений JScript.

/a/
/7/
/M/

Несколько отдельных знаков можно объединить в более длинное выражение. Например, выражение /the/ сопоставляется с "the" в следующих строках, в которых ведется поиск: "the", "there", "other" и "over the lazy dog".

Оператор объединения не требуется. Все что нужно — это поместить один символ после другого.

Метасимволы

В дополнение к обычным символам регулярное выражение может содержать метасимволы. Пример метасимвола — \d, который соответствует цифровому символу.

Дополнительные сведения см. в разделе Синтаксис регулярного выражения.

К обычным знакам относятся все печатаемые и непечатаемые знаки, которые явно не заданы как метасимволы. Это включает все буквенные символы нижнего и верхнего регистра, все цифры, все знаки препинания и некоторые символы.

Сопоставление любого символа

Символ точки (.) соответствует любому одиночному печатаемому или непечатаемому символу в строке, за исключением символа новой строки (\n). Регулярное выражение /a.c/ соответствует "aac", "abc", "acc", "adc", "a1c", "a2c", "a-c" и "a#c".

Для поиска точки (.) в строке в выражении перед точкой следует поместить обратную косую черту (\). Выражение /filename\.ext/ соответствует "filename.ext".

Списки сопоставляемых символов

Список сопоставляемых символов можно создать путем заключения одного или нескольких отдельных символов в квадратные скобки [ ].

Любой символ, заключенный в выражение в квадратных скобках, сопоставляется только с одним символом в той же позиции в регулярном выражении, где отображается выражение в квадратных скобках. Например, выражение /Chapter [12345]/ соответствует строкам "Chapter 1", "Chapter 2", "Chapter 3", "Chapter 4" и "Chapter 5".

Задать сопоставляемые символы с помощью диапазона, а не самих символов, можно с помощью символа дефиса (-). Выражение /Chapter [1-5]/ эквивалентно выражению /Chapter [12345]/.

Чтобы найти все символы, не входящие в список или диапазон, поместите в начале списка знак крышки (^). Например, выражение /[^aAeEiIoOuU]/ соответствует любому буквенному символу, не обозначающему гласный звук.

Дополнительные сведения см. в разделе Списки сопоставляемых символов.

Кванторы

Кванторы служат для задания регулярного выражения, в котором символ или набор символов повторяется определенное число раз.

Квантор ссылается на выражение, непосредственно ему предшествующее (расположенное слева от него).

Кванторы заключаются в фигурные скобки {} и включают числовые значения для нижнего и верхнего пределов вхождений. Например, c{1,2} соответствует 1 или 2 вхождениям буквы "c".

Если указано только одно число, оно используется как верхний предел при условии, что за ним не следует запятая. Например, c{3} соответствует точно 3 вхождениям буквы "c", а c{5,} соответствует 5 или более вхождениям буквы "c".

Существуют также односимвольные кванторы, как показано в следующей таблице.

Квантификатор

Явный квантор

Значение

*

{0,}

Соответствует предыдущему элементу ноль или более раз

+

{1,}

Соответствует предыдущему элементу один или более раз

?

{0,1}

Соответствует предыдущему элементу ноль или один раз

Ниже приведены некоторые образцы выражений вместе со строками поиска, которым они соответствуют.

Регулярное выражение

Значение квантора

Соответствия

/Chapter [1-9][0-9]{0,}/ или

/Chapter [1-9][0-9]*/

Соответствует [0-9] ноль или более раз

"Chapter 1", "Chapter 25", "Chapter 401320"

/Chapter [0-9]{1,2}/

Соответствует [0-9] один или два раза

"Chapter 0", "Chapter 03", "Chapter 1", "Chapter 25", "Chapter 40"

/Chapter [1-9][0-9]{0,1}/ или

/Chapter [1-9][0-9]?/

Соответствует [0-9] ноль или один раз

"Chapter 1", "Chapter 25", "Chapter 40"

Дополнительные сведения см. в разделе Квантификаторы в JScript.

Ограничения строк и слов

Привязки позволяют указать, что регулярное выражение должно отображаться или в начале, или в конце строки, в которой ведется поиск, либо в начале или в конце строки или слова в строке, в которой ведется поиск, чтобы стать соответствием. Дополнительные сведения см. в разделе Привязки.

Задание альтернатив

Символ "|" указывает, что соответствие представляют две и более альтернативы. Например, регулярное выражение JScript /(Chapter|Section) [1-9]/ соответствует следующему: "Chapter 1", "Chapter 9" и "Section 2". Дополнительные сведения см. в разделе Чередование и части выражений.

Использование подстрок совпадения

Круглые скобки используются в регулярном выражении для создания частей выражения. Результирующая подстрока совпадения может быть извлечена программой. Дополнительные сведения см. в разделе Чередование и части выражений.

К части выражения можно обратиться из регулярного выражения и из строки замены. Дополнительные сведения см. в разделе Обратные ссылки в JScript.

См. также

Основные понятия

Программирование регулярных выражений

Синтаксис регулярного выражения