SEO блог — Поисковая оптимизация


Регулярные выражения в JavaScript

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

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

Регулярное выражение (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

граница слова

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

/\ber/ совпадает с error, не совпадает с hero или с player
/er/ совпдает с player, не совпадает с hero или с error
/\ber\b/ не совпадает с hero или с player или с error, может совпасть только с er

\B

не граница слова

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

/\Ber/ совпадает с hero или с player, не совпадает с error
/er\B/ совпадает с error или с player, не совпадает с hero
/\Ber\B/ совпадает с hero, не совпадает с player или с error

\d

цифра от 0 до 9

/\d\d\d\d/ совпадает с любым четырёх значным числом

\D

не цифра

/\D\D\D\D/ не совпадёт с 2005 или 05.г или №126 и т.д.

\s

одиночный пустой символ

соответствует символу пробела

\over\sbyte\ совпадает только с over byte

\S

одиночный непустой символ

любой один символ за исключением пробела

\over\Sbyte\ совпадает с over-byte или с over_byte, не совпадает с over byte или over—byte

\w

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

/A\w/ совпадает с A1 или с AB, не совпадает с A+

\W

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

/A\W/ не совпадает с A1 или с AB, совпадает с A+

.

любой символ

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

/…/ совпадает с любыми тремя символами ABC или !@4 или 1 q

[ ]

набор символов

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

/[QA]WERTY/ совпадает с QWERTY, с AWERTY

[^ ]

набор не входящих символов

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

/[^QA]WERTY/ не совпадает с QWERTY, с AWERTY

Символы, приведенные в таблице «Метасимволы поиска совпадений» не надо путать с последовательностью знаков перехода используемых в строках, таких как \\t — табуляция, \\n — переход на новую строку и т.д.

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

Символ

Количество совпадений

Пример

*

Ноль и большее количество раз

/Ja*vaScript/ совпадает с JvaScript или с JaavaScript или с JaaavaScript, не совпадает с JovaScript

?

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

/Ja?vaScript/ совпадает только с JvaScript или с JavaScript

+

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

/Ja+vaScript/ совпадает с JavaScript или с JaavaScript или с JaaavaScript, не совпадает с JvaScript

{n}

точно n раз

/Ja{2}vaScript/ совпадает только с JaavaScript

{n,}

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

/Ja{2,}vaScript/ совпадает с JaavaScript или с JaaavaScript, не совпадает с JvaScript или с JavaScript

{n,m}

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

/Ja{2,3}vaScript/ совпадает только с JaavaScript или с JaaavaScript

Каждый символ, приведенный в таблице «Количественные метасимволы» применяется к одному предшествующему символу или метасимволу в регулярном выражении.

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

Символ

Совпадает с расположением

Пример

^

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

/^Fred/ совпадает с Fred is OK, не совпадает с I’m with Fred или с Is Fred here?

$

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

/Fred$/ совпадает с I’m with Fred, не совпадает с Fred is OK или с Is Fred here?

Последний набор метасимволов предназначен для обозначения, где искать (если это важно) подстроку в начале строки или в конце.
Некоторые методы для работы с шаблонами

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.

≡ Оставить ответ