Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Сборник статей
 
 

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

Автор: Выскорко М.С. (softtime.ru)

Введение

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

Примечание

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

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

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

 
 » Обсудить эту статью на форуме

 
 Сборник статей 
 Содержание раздела 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS