
- •Var имя_переменной:
- •Var myName пример js6
- •Integer
- •InternetAddress
- •Internetaddress
- •Приоритеты выполнения операций
- •If (условие1) {
- •Операторы цикла
- •Var column,row;
- •Var column,row;
- •Var objArr;
- •ValueOf()
- •Var myArr, c;
- •Var timeStr;
- •Var Spoint;
- •Регулярные выражения: пример 30
- •Работа с регулярными выражениями
- •Методы класса RegExp
- •Var result, re, str;
- •Свойства глобального объекта RegExp.
- •Var re, str, protocol, address, filename, result;
- •Regular Expressions
- •Метасимволы
- •Классы символов
- •Квантификаторы
- •Action в javascript
- •Использование Action в javascript.
- •Свойство method.
- •Использование свойства method в js.
- •Заключение.
Метасимволы
Ранее мы использовали только литеральные символы, например, ‘s’. Он совпадает только с символом ‘s’ в строке, ну и, быть может, ‘S’ при наличии модификатора /i. Однако существуют символы, имеющие специальное значение – метасимволы. Они могут обозначать целый класс символов.
Метасимвол ‘.’ совпадает с любым одиночным символом в строке, кроме ‘\n’.
Пример Js44
Так,
var re = /l.t/ig;
var st = "A little plot. l\nt";
alert(st.match(re));
выведет
Здесь точка в первый раз совпала с символом ‘i’, а второй – с ‘o’. А вот совпадения в конце нету из-за того, что метасимвол ‘.’ не совпадает с ‘\n’.
Пример Js45
Если же в строке требуется найти именно точку, необходимо отменить её специальную интерпретацию – экранировать. Для этого перед метасимволом ставится обратный слэш:
var re = /l\.t/ig;
var st = "A little L.T.C.";
alert(st.match(re));
Пример выводит
При таком объявлении шаблона символ ‘/’ тоже необходимо экранировать, так как в противном случае он будет проинтерпретирован как конец шаблона.
Заметим, что сам обратный слэш также является метасимволом, и при поиске его нужно экранировать:
Пример Js46
var re = /C:\\t/ig;
var st = "C:\\tr";
alert(st.match(re));
Заметим, что при объявлении st \ нужно экранировать, так как иначе последовательность \t будет воспринята как символ табуляции.
Пример Js47
Из-за того, что обратный слэш имеет специальное значение и в шаблоне, и в строке, могут возникнуть трудности при создании объектов RegExp: код
var re = new RegExp("C:\\t", "ig");
var st = "C:\\tr";
alert(st.match(re));
вопреки ожиданиям выводит
Происходит это потому, что “C:\\t” воспринимается как /C:\t/, и ищется символ табуляции. Правильный вариант таков:
Пример Js48
var re = new RegExp("C:\\\\t", "ig");
var st = "C:\\tr";
alert(st.match(re));
Метасимвол ‘^’ совпадает с началом строки. Так как по сути начало строки не является символом, ‘^’ называют метасимволом нулевой ширины. Аналогично, метасимвол ‘$’ совпадает с концом строки.
Пример Js49
Поэтому код
var re = /^str$/;
var st = "str"; var s = " str";
alert(st.match(re) + ' ' + s.match(re));
выводит
Пример Js50
Заметим, что строка воспринимается как единое целое, то есть код
var re = /^str$/g;
var st = "str\nstr";
alert(st.match(re));
выводит
- совпадения нету, потому что ‘\n’ не разрывает строку на две строки.
Однако модификатор /m позволяет считать символы ‘\n’ разделителями строк:
Пример Js51
var re = /^str$/gm;
var st = "str\nstr";
alert(st.match(re));
Вот, мы и изучили все виды модификаторов: /i, /g, /m. Других в JavaScript нет. Хотя в других языках могут встретиться модификаторы /s, позволяющий метасимволу ‘.’ совпадать с ‘\n’, /x, позволяющий вставлять комментарии внутрь шаблона, и /o для однократной компиляции шаблона в противовес динамическому созданию регулярных выражений.