Документация  >  Javascript  >  Регулярные выражения в Javascript ч. 2

Введение

Регулярные выражения — это мощное средство для обработки входящих данных. Задача, требующая замены или поиска текста, может быть красиво решена с помощью этого "языка внутри языка". И хотя максимальный эффект от регулярных выражений можно добиться при использования серверных языков, всё же не стоит недооценивать возможности этого приложения и на стороне клиента.

Основные понятия

Регулярное выражение (regular expression) — средство для обработки строк или последовательность символов, определяющая шаблон текста.

Модификатор — предназначен для "инструктирования" регулярного выражения.

Метасимволы — специальные символы, которые служат командами языка регулярных выражений.

Регулярное выражение задаётся как обычная переменная, только вместо кавычек используется слеш, например: var reg=/рег_выражение/

Под простейшими шаблонами будем понимать такие шаблоны, которые не нуждаются в каких-либо специальных символах.

Допустим, нашей задачей является замена всех букв "р" (малых и заглавных) на латинскую большую букву "R" в словосочетании Регулярные выражения.

Создаём шаблон var reg=/р/ и воспользуясь методом replace осуществляем задуманное

<script language="JavaScript">
var str="Регулярные выражения"
var reg=/р/
var result=str.replace(reg, "R")
document.write(result)
</script>

В результате получим строку «РегуляRные выражения», замена произошла только на первом вхождении буквы "р" с учётом регистра.

Но под условия нашей задачи этот результат не подходит... Тут нам понадобятся модификаторы "g" и "i", которые могут использоваться как отдельно, так и совместно. Эти модификаторы ставятся в конце шаблона регулярного выражения, после слэша, и имеют следующие значения:

модификатор "g" — задаёт поиск в строке как "глобальный", т.е. в нашем случае замена произойдет для всех вхождений буквы "р". Теперь шаблон выглядит так: var reg=/р/g, подставив его в наш код

<script language="JavaScript">
var str="Регулярные выражения"
var reg=/р/g
var result=str.replace(reg, "R")
document.write(result)
</script>

получим строку «РегуляRные выRажения».

модификатор "i" — задаёт поиск в строке без учёта регистра, добавив этот модификатор в наш шаблон var reg=/р/gi, после выполнения скрипта получим искомый результат нашей задачи -- «RегуляRные выRажения».

Специальные символы (метасимволы)

Метасимволы задают тип символов искомой строки, способ окружения искомой строки в тексте, а так же количество символов отдельного типа в просматриваемом тексте. Поэтому метасимволы можно разделить на три группы:

  • Метасимволы поиска совпадений.
  • Количественные метасимволы.
  • Метасимволы позиционирования.

Метасимволы поиска совпадений

\b
граница слова, задаёт условие, при котором шаблон должен выполняться в начале или конце слов.

\B
не граница слова, задаёт условие, при котором шаблон не выполняется в начале или конце слова.

\d, цифра от 0 до 9.

\D, не цифра.

\s, одиночный пустой символ, соответствует символу пробела.

\S, одиночный непустой символ, любой один символ за исключением пробела.

\w, буква, цифра или символ подчёркивания.

\W, не буква, цифра или символ подчёркивания.

.
любой символ, любые знаки, буквы, цифры и т.д.

[ ]
набор символов, задаёт условие, при котором шаблон должен выполняться при любом совпадении символов заключенных в квадратные скобки.

[^ ], набор не входящих символов, задаёт условие, при котором шаблон не должен выполняться при любом совпадении символов заключенных в квадратные скобки.

Количественные метасимволы

*
ноль и большее количество раз.

?
Ноль или один раз

+
Один и большее количество раз.

{n}
точно n раз.

{n,}
n или большее количество раз.

{n,m}
по крайней мере, n раз, но не более чем m раз.

Метасимволы позиционирования

^
в начале строки.

$
в конце строки.

Некоторые методы для работы с шаблонами

replace — данный метод мы уже использовали в самом начале статьи, он предназначен для поиска образца и замены найденной подстроки на новую подстроку.

test — данный метод проверяет, есть ли совпадения в строке относительно шаблона и возвращает false, если сопоставление с образцом закончилось неудачей, в противном случае true.

например:

<script language="JavaScript">
var str="JavaScript"
var reg=/PHP/
var result=reg.test(str)
document.write(result)
</script>

выведет в качестве результата false, т.к. строка "JavaScript" не равна строке "PHP".

Также метод test может возвращать вместо true или false любую другую строку заданную программистом.

например:

<script language="JavaScript">
var str="JavaScript"
var reg=/PHP/
var result=reg.test(str) ? "Строка совпала" : "Строка не совпала"
document.write(result)
</script>

в этом случае в качестве результата будет строка «Строка не совпала».

exec -- данный метод выполняет сопоставление строки с образцом, заданным шаблоном. Если сопоставление с образцом закончилось неудачей, то возвращается значение null. В противном случае результатом является массив подстрок, соответствующих заданному образцу. /*Первый элемент массива будет равен исходной строке удовлетворяющее заданному шаблону*/

например:

<script language="JavaScript">
var reg=/(\d+).(\d+).(\d+)/
var arr=reg.exec("Я родился 15.09.1980")
document.write("Дата рождения: ", arr[0], "< br>")
document.write("День рождения: ", arr[1], "< br>")
document.write("Месяц рождения: ", arr[2], "< br>")
document.write("Год рождения: ", arr[3], "< br>")
</script>

в результате получим четыре строки:
Дата рождения: 15.09.1980
День рождения: 15
Месяц рождения: 09
Год рождения: 1980
Заключение

В статье отображено далеко не все возможности и прелести регулярных выражений, для более глубокого изучения этого вопроса посоветую изучить объект RegExp. Так же хочу обратить внимание на то, что синтаксис регулярных выражений не чем не отличается как в JavaScript, так и в PHP. К примеру, для проверки правильности ввода e-mail, регулярное выражение, что для JavaScript, что для PHP будет выглядеть одинаково /[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i.

Выскорко М. С.,
15.07.2006.

Вернуться к списку

Добавить в закладки