Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaScript_2009.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.16 Mб
Скачать

Метасимволы

Ранее мы использовали только литеральные символы, например, ‘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 для однократной компиляции шаблона в противовес динамическому созданию регулярных выражений.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]