То есть шаблону /\B[Ss]cript/
будут соответствовать слова « JavaScript
» и « post-script
» и не будут соответствовать слова « script
» или « Scripting
».
В качестве якорных условий могут также выступать произвольные регулярные выражения. Если поместить выражение между символами (?=
и )
, оно превратится в опережающую проверку на совпадение с последующими символами, требующую, чтобы эти символы соответствовали указанному шаблону, но не включались в строку соответствия. Например, чтобы найти совпадение с названием распространенного языка программирования, за которым следует двоеточие, можно воспользоваться выражением /[Jj]ava([Ss]cript)?(?=\:)/
. Этому шаблону соответствует слово «JavaScript» в строке «JavaScript: The Definitive Guide», но ему не будет соответствовать слово «Java» в строке «Java in a Nutshell», потому что за ним не следует двоеточие.
Если же ввести условие (?!
, то это будет негативная опережающая проверка на последующие символы, требующая, чтобы следующие символы не соответствовали указанному шаблону. Например, шаблону /Java(?!Script)([A-Z]\w*)/
соответствует подстрока «Java», за которой следует заглавная буква и любое количество текстовых ASCII-символов при условии, что за подстрокой « Java
» не следует подстрока « Script
». Он совпадет со строкой « JavaBeans
», но не совпадет со строкой «Javanese», совпадет со строкой «JavaScrip», но не совпадет со строками «JavaScript» или «JavaScripter».
В табл. 10.5 приводится перечень якорных символов регулярных выражений.

И еще один, последний элемент грамматики регулярных выражений. Флаги регулярных выражений задают высокоуровневые правила соответствия шаблонам. В отличие от остальной грамматики регулярных выражений, флаги указываются не между символами слэша, а после второго из них. В языке JavaScript поддерживается три флага. Флаг і
указывает, что поиск по шаблону должен быть нечувствителен к регистру символов, а флаг d
- что поиск должен быть глобальным, т. е. должны быть найдены все соответствия в строке. Флаг m
выполняет поиск по шаблону в многострочном режиме. Если строковое выражение, в котором выполняется поиск, содержит символы перевода строк, то в этом режиме якорные символы ^ и $, помимо того, что они соответствуют началу и концу всего строкового выражения, также соответствуют началу и концу каждой текстовой строки. Например, шаблону /java$/im
соответствует как слово « java
», так и « Java\nis fun
».
Эти флаги могут объединяться в любые комбинации. Например, чтобы выполнить поиск первого вхождения слова «java» (или «Java», «JAVA» и т. д.) без учета регистра символов, можно воспользоваться нечувствительным к регистру регулярным выражением /\Ьj ava\b/i. А чтобы найти все вхождения этого слова в строке, можно добавить флаг g: /\bjava\b/gi.
В табл. 10.6 приводится перечень флагов регулярных выражений. Заметим, что флаг g
более подробно рассматривается далее в этой главе вместе с методами классов String
и RegExp
, используемых для фактической реализации поиска.

10.2. Методы класса String для поиска по шаблону
До этого момента мы обсуждали грамматику создаваемых регулярных выражений, но не рассматривали, как эти регулярные выражения могут фактически использоваться в JavaScript-сценариях. В данном разделе мы обсудим методы объекта String
, в которых регулярные выражения применяются для поиска по шаблону, а также для поиска с заменой. А затем продолжим разговор о поиске по шаблону с регулярными выражениями, рассмотрев объект RegExp
, его методы и свойства. Обратите внимание, что последующее обсуждение - лишь обзор различных методов и свойств, относящихся к регулярным выражениям. Как обычно, полное описание можно найти в третьей части книги.
Строки поддерживают четыре метода, использующие регулярные выражения. Простейший из них - метод search().
Он принимает в качестве аргумента регулярное выражение и возвращает либо позицию первого символа найденной подстроки, либо -1
, если соответствие не найдено. Например, следующий вызов вернет 4:
Читать дальше
Конец ознакомительного отрывка
Купить книгу