Объект RegExp. Регулярные выражения
Регулярные выражения представляют шаблон,
который используется для поиска или модификации строки.
Для работы с регулярными выражениями в JavaScript определен объект RegExp .
Определить регулярное выражение можно двумя способами:
var myExp = /hello/;
var myExp = new RegExp("hello");
Используемое здесь регулярное выражение довольно простое:
оно состоит из одного слова "hello".
В первом случае выражение помещается между двумя косыми чертами,
а во втором случае используется конструктор RegExp,
в который выражение передается в виде строки.
Методы RegExp
Чтобы определить, соответствует ли регулярное выражение строке, в объекте RegExp определен метод test(). Этот метод возвращает true, если строка соответствует регулярному выражению, и false, если не соответствует.
var initialText = "hello world!"; var exp = /hello/; var result = exp.test(initialText); document.write(result + "<.br/>"); // true initialText = "beautifull wheather"; result = exp.test(initialText); document.write(result); // false - в строке initialText нет "hello"Аналогично работает метод exec - он также проверяет, соответствует ли строка регулярному выражению, только теперь данный метод возвращает ту часть строки, которая соответствует выражению. Если соответствий нет, то возвращается значение null.
var initialText = "hello world!"; var exp = /hello/; var result = exp.exec(initialText); document.write(result + "<.br/>"); // hello initialText = "beautifull wheather"; result = exp.exec(initialText); document.write(result); // null
Группы символов
Регулярное выражение не обязательно состоит из обычных строк, но также может включать специальные элементы синтаксиса регулярных выражений. Один из таких элементов представляют группы символов, заключенные в квадратные скобки. Например:
var initialText = "обороноспособность"; var exp = /[абв]/; var result = exp.test(initialText); document.write(result + "<.br/>"); // true initialText = "город"; result = exp.test(initialText); document.write(result); // falseВыражение [абв] указывает на то, что строка должна иметь одну из трех букв.
Если нам надо определить наличие в строке буквенных символов из определенного диапазона, то можно разу задать этот диапазон:
var initialText = "обороноспособность"; var exp = /[а-я]/; var result = exp.test(initialText); document.write(result + "<.br/>"); // true initialText = "3di0789"; result = exp.test(initialText); document.write(result); // falseВ данном случае строка должна содержать хотя бы один символ из диапазона а-я.
Если, наоборот, не надо, чтобы строка имела только определенные символы, то необходимо в квадратных скобках перед перечислением символов ставить знак ^:
var initialText = "обороноспособность"; var exp = /[^а-я]/; var result = exp.test(initialText); document.write(result + "<.br/>"); // false initialText = "3di0789"; exp = /[^0-9]/; result = exp.test(initialText); document.write(result); // trueВ первом случае строка не должна иметь только символы из диапазона а-я, но поскольку строка "обороноспособность" состоит только из символов из этого диапазона, то метод test() возвращает false, то есть регулярное выражение не соответствует стоке.
Во втором случае ("3di0789") строка не должна состоять только из цифровых символов. Но так как в строке также есть и буквы, то строка соответствует регулярному выражению, поэтому метод test возвращает значение true.
При необходимости мы можем собирать комбинации выражений:
var initialText = "дома"; var exp = /[дт]о[нм]/; var result = exp.test(initialText); document.write(result); // trueВыражение [дт]о[нм] указывает на те строки, которые могут содержать подстроки "дом", "том", "дон", "тон".
Свойства выражений
- Свойство global позволяет найти все подстроки, которые соответствуют регулярному выражению. По умолчанию при поиске подстрок регулярное выражение выбирает первую попавшуюся подстроку из строки, которая соответствует выражению. Хотя в строке может быть множество подстрок, которые также соответствуют выражению. Для этого применяется данное свойство в виде символа g в выражениях
- Свойство ignoreCase позволяет найти подстоки, которые соответствуют регулярному выражению, вне зависимости от регистра символов в строке. Для этого в регулярных выражениях применяется символ i
- Свойство multiline позволяет найти подстроки, которые соответствуют регулярному выражению, в многострочном тексте. Для этого в регулярных выражениях применяется символ m
var initialText = "привет Мир"; var exp = /мир/; var result = exp.test(initialText); // falseЗдесь совпадения строки с выражением нет, так как "Мир" отличается от "мир" по регистру. В этом случае надо изменить регулярное выражение, добавив в него свойство ignoreCase: var exp = /мир/i; Ну и также мы можем использовать сразу несколько свойств: var exp = /мир/ig; Output