регулярные выражения языка javascript очень похожи на аналогичные из php, которые, в свою очередь, почти полностью повторяют персонал языка perl, откуда они, собственно, и пришли. в php нет классов регулярных выражений; это обычные текстовые строки. поэтому переменные в данных выражениях использовать очень просто. допустим, имеем переменную $val, в которой содержится цифра прописью. также имеем особым образом отформатированную строку $str, в которой и будет искаться совпадение.
если непонятно, что же это будет, представьте строку, в которой возможные значения записаны через разделитель, в данном случае это вертикальная черта |. в переменной $val может содержаться одно из возможных значений. тогда код для поиска можно записать так:
<?php
$str = '|раз|два|три|';
$val = 'два';
$reg = '/\|' . $val . '\|/';
if (preg_match($reg, $str)) {
echo 'совпадение найдено';
} else {
echo 'совпадение отсутствует';
}
как видно, особых проблем не возникло. теперь попытаемся то же самое реализовать на javascript. и первое, с чем придётся столкнуться — свой (отдельный) объект регулярных выражений делает их более строгими с синтаксису. но это ещё полбеды. попытка записать регулярное выражение в лоб: /\|val\|/ ни к чему не приведёт. во первых, строка val не будет обработана так, как этого, возможно, ожидается (будет просто искаться строка, содержащая val). и во вторых: вертикальная черта является служебным символом, т. е. чтобы получить черту, потребуется её экранировать. но обратная косая черта в свою очередь также является спец-символом, и тоже подлежит экранированию. с вертикальной чертой и экранированием разобрались. теперь осталось решить вопрос с переменной.
а решается он довольно просто. достаточно знать, что регулярное выражение можно создать с помощью специального объекта:
RegExp(pattern, [flags]), где pattern — строка. теперь у нас достаточно знаний, чтобы составить регулярное выражение и на javascript:
var str = '|раз|два|три|';
var val = 'два';
var reg = new RegExp('\\|' + val + '\\|');
if (-1 == str.search(reg)) {
alert('совпадение отсутствует');
} else {
alert('совпадение найдено');
}
совпадения можно искать с помощью функции search, которая возвращает -1, если совпадения не найдены, либо позицию в строке, если совпадение нашлось. напомню, что сцепка строк в javascript производится с помощью символа +. в общем, регулярные выражения на javascript настолько же круты, как и в perl. но, помимо это, у них есть ещё один неоспоримый плюс: выполнение происходит на клиенте, что очень блогоприятно скажется на вашем сервере.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц