Форма обратной связи регулярные выражения javascript. Регулярные выражения в JavaScript. Использование простых шаблонов
7-мая версия PHP увидела свет в недавнем 2015 году. Новый виток в развитии этого языка программирования принес много возможностей для всех тех, кто использует PHP . Среди преимуществ новой версии следует выделить скорость. Так, по данным разработчиков, скорость работы скриптов на PHP 7 , по сравнению с предыдущими версиями, возросла почти в два раза. В связи с этим, многие владельцы сайтов, на которых установлены более старые версии PHP , хотят перейти на новую.
Зачем проверять на совместимость?
Следует отметить, что перед тем, как в панели управления Вашего хостинга менять версию PHP на более новую и быструю, необходимо проверить сайт WordPress на совместимость с ней, а именно темы и плагины. Такая необходимость возникает из-за того, что обычно в новых версиях программного обеспечения какие-то функции добавляются, а некоторые вообще перестают существовать. Если в каком-то плагине или теме используется несуществующие в новой версии функции или методы, то это привет к ошибке, что может нарушить работу сайта в целом.
Как проверить на совместимость с PHP 7.0?
Плагин PHP Compatibility Checker
Плагин PHP Compatibility Checker позволяет просканировать весь сайт и указать, какие из его компонентов (темы, плагины) не совместимы с выбранной версией PHP . Для начала необходимо его установить и активировать, после чего в админ-панели перейти Инструменты -> PHP Compatibility .
Как видим, плагин предлагает весьма понятные настройки. Для начала проверки необходимо выбрать версию PHP , на совместимость с которой хотите проверить сайт (блок PHP Version ). Удобной функцией плагина является выбор статуса проверяемых компонентов. Доступны на выбор два варианта: либо проверять среди активных тем и плагинов, либо в неактивных (поле Plugin / Theme Status ). Для старта проверки нужно нажать кнопку Scan site again .
Результат проверки также можно загрузить в текстовом файле, нажав для этого кнопку Download Report .
Это главный файл в вашей теме WordPress. Располагается в /wp-content/themes/{тут название вашей темы}/functions.php .
В нём определяются важные свойства темы, кастомизируются хуки, внешний вид и её функциональность, а также добавляются некоторые необходимые вам функции. Этот файл загружается каждый раз при открытии любой страницы WordPress, поэтому с его помощью можно изменить любой элемент сайта. В связи с этим, многие советы а-ля «как изменить что-то в WordPress без плагинов
» часто касаются именно внесения изменений в functions.php, вместо того, чтобы создать под этот функционал отдельный плагин или воспользоваться готовым решением. Зачастую это приводит к информационной перегрузке этого файла, код становится тяжело разобрать, а внести исправления ещё сложнее. Но не это самое опасное. Самое опасное — это то, что при смене активной темы пропадёт часть или весь необходимый функционал сайта
.
Чем отличается functions.php от плагина
Ничем. По своей сути, functions.php и есть эдакий глобальный неотключаемый плагин, который привязан к текущей теме. Как он подключается в WordPress, можно посмотреть в wp-settings.php . Как видно из исходного кода, его загрузка происходит после всех плагинов, однако, это не даёт никаких недостатков или преимуществ, разве что возможность переопределить что-то в подключенных плагинах. На скорость исполнения кода это также никак не повлияет. Влияет только содержание плагинов и functions.php. Поэтому, будьте внимательны при выборе активных плагинов для своей темы и откажитесь от ненужных, малополезных вам, тогда вы сможете облегчить ваш сайт и ускорить его работу.
Когда нужно использовать functions.php
Руководствуйтесь следующим правилом: если функционал напрямую связан с текущей темой, но не с работой сайта, записывайте его в functions.php.
К примеру, это может быть
- Настройка миниатюр
- Установка размеров сайдбаров
- Настройка мест под виджеты
- Объявление мест под навигационное меню
- Настройки темы
- Дополнительные функции вашей темы
Когда стоит избегать использования functions.php
Если функционал должен работать даже при смене активной темы, стоит позаботиться об его вынесении в отдельный плагин.
Сюда можно отнести:
- Определение счётчиков посещаемости (Google Analytiсs, Yandex.Metrika, Liveinternet)
- Настройка дополнительного функционала админки (например, )
- Конфигурирование исходного кода ()
- Определение шорткодов
- Регистрация
Списки неполные, вы можете определить их содержание сами под себя.
Куда внести данный код, если не в functions.php? Вы можете написать специальные плагины под них, однако, есть способ интереснее и проще.
mu-plugins как альтернатива functions.php
К нам в современные версии WordPress из WordPress MU(Multi-User) пришёл интересный функционал, называемый MU Plugins
. Суть его заключалась в следующем. Администратору WordPress MU порой требовалось определить плагины для всей сети сайтов. Обычным функционалом этого было не добиться, поэтому ввели специальный раздел: /wp-content/mu-plugins/ , где они и определялись. Ещё что интересно, файлы плагинов из этой директории загружаются раньше всех остальных, что даёт возможность предопределить некоторые константы или настройки.
Позже WPMU упразднили, его код интегрировали с основным блоговым, и теперь любой WordPress может использовать функционал MU-plugins, который теперь расшифровывается как Must Use
, то есть обязательный к использованию.
Как использовать mu-plugins
Вначале нужно создать специальный раздел /wp-content/mu-plugins/
В него мы помещаем нужные файлы-плагины. В отличие от обычных плагинов, здесь не нужно выдерживать специальный синтаксис, а функционал можно объявлять напрямую
Здесь для примера создан файл с кодом счётчиков посещаемости.
Внутри этот файл выглядит вот так
// ... Вместо этой строки вставляем код счётчиков...
В админке он будет выглядеть как Необходимые
Приветствуют, друзья. Сегодня мы с вами разберемся в том, как заставить работать любой PHP код в виджетах, статьях и на страницах WordPress. По умолчанию такая функция в этой CMS недоступна и максимум, на что может рассчитывать пользователь – это внедрение HTML кода.
Почему PHP код не работает по-умолчанию
Казалось бы, почему разработчики не наградили столь популярный и удобный движок полезными возможностями по автоматическому исполнению PHP кода. Поначалу я задумывался об этом, но пришел к выводу, что такая политика ведется с позиции безопасности, ведь, неумелое применение PHP в виджетах или внутри записей может привести к непоправимым последствиям – в базе данных что-нибудь нарушится и весь сайт крякнет.
Поэтому, работа с PHP отдана на откуп программистов или людей более менее продвинутых в этом вопросе – непосредственно в файлах любые скрипты исполняются.
Для публичных сайтов (там, где несколько авторов) исполнение PHP в теле статьи повышается риск умышленного саботажа, так как любой автор может получить полный доступ к сайту через окно редактирования статей.
По степени опасности я бы разделил всю эту ситуацию на 3 уровня:
- Оставить все как задумали разработчики – безопасно, случайно или умышленно повредить сайт сложно.
- Разрешить исполнение PHP в виджетах – средний уровень опасности, только администратор сайта имеет доступ.
- Применение кода везде – опасно, так как управлять сайтом может каждый кто допущен к редактированию статей и страниц (модераторы, авторы)
Для чего нужен PHP в виджетах
Вопрос индивидуальный, так как реализовать с помощью этого языка программирования можно все что угодно. Лично меня к написанию этого поста подтолкнул заказ клиента, сайт которого я сейчас делаю. На нем необходимо было вывести в сайдбаре в отдельном виджете список новостей из одной рубрики – «Новости». В стандартных виджетах WordPress нет такой возможности.
Вопрос стоял между поиском плагина с соответствующими возможностями или применением несложного PHP кода. Скрипт для такой задачи, действительно, небольшой и нагружать сайт лишним плагином, который больше нигде использоваться не будет, не хотелось.
В целом, разрешая исполнение PHP, мы можем решить 2 задачи:
- Заменить часть плагинов сайта на скрипты и снизить таким способом нагрузку на хостинг;
- Реализовать функции, для которых плагинов пока не существует.
На первом этапе я расскажу о виджетах, а потом, отдельным блоком про вывод кода в контенте.
Плагины для PHP в виджетах
Преимущество плагинов: При смене темы оформления WordPress не нарушается работа функций добавленных в шаблон, все продолжает работать не требуя вмешательства вебмастера. Хуки добавленные в шаблон при смене темы придется переносить на новую вручную.
В моем примере выше, я делаю сайт для клиента и, если он захочет самостоятельно сменить дизайн, то пропадут настройки, которые сделаны через файлы functions.php и др., поэтому я максимально упрощаю ему управление сайтом, опираясь на плагины (тем более, в его нише трафик невелик и нагрузки много не будет).
PHP Code Widget
Этот плагин я давно использую в своей работе, он добавляет в список доступных виджет, похожий на обычный текстовый, только способный обрабатывать кроме текста и HTML еще и PHP.
PHP Code Widget присутствует в официальном репозитарии WordPress, легко находится по названию. Как устанавливать такие плагины .
Настроек не требуется, виджет в списке появится сразу после установки и активации плагина. В сайдбар перетаскиваете «PHP Code» и добавляете туда любой скрипт.
PHP в виджете WordPress без плагина
В этом случае нам потребуется хук, который будет подменять стандартную функцию, обеспечивающую работу текстового WordPress виджета, функцией разрешающей обрабатывать PHP.
Такой хук добавляется в файл functions.php текущей темы (в самом конце перед закрывающей скобкой?>). После этого, новых вариантов виджета, как в случае с плагином, не появляется, PHP коды начинают работать в стандартном текстовом.
Готовый код:
add_filter("widget_text"," text_html_php_widget ",100); function text_html_php_widget($text) { if(strpos($text,"") !== false) { ob_start(); eval("?>".$text); $text = ob_get_contents(); ob_end_clean(); } return $text; }
add_filter ("widget_text" , " text_html_php_widget " , 100 ) ; function text_html_php_widget ($text ) { if (strpos ($text , " ") !== false) { Ob_start(); Eval(" ?> ". $text ) ; $text = ob_get_contents () ; ob_end_clean () ; return $text ; |
Первая строка является фильтром, который заменяет при каждом вызове стандартную функцию текстового виджета на новую – text_html_php_widget, а далее идет описание самой новой функции.
Зачем PHP код в статьях и постах WordPress
Внутри записей исполняемый PHP код требуется значительно реже, чем в виджетах, поэтому в первой части статьи я отдельно рассматривал сайдбар, чтобы вы могли не подключать потенциально опасные функции без необходимости.
Но и в постах бывает потребность использования скриптов. Самый частый пример – это вывод карты сайта без плагина. Правда, для карты можно использовать другой приём – сделать специальный шаблон страницы (это отдельная тема).
Мне однажды понадобилось выводить PHP для следующей цели:
Делал я видео сайт. Серии сериала выводились в плейлистах по сезонам и надо было под каждым плейлистом сезона вывести список серий со ссылкой на свою страницу. Похоже на карту сайта, только сложнее – вывод делать надо было списками отдельных рубрик. Можно было вручную HTML кодом каждую ссылку прописать, но там несколько сот серий и процедура муторная. Тем более, при появлении новой серии ссылку на нее пришлось бы добавлять вручную – неудобно. Вот я и решил использовать PHP функции для реализации.
Плагин для исполнения PHP в контенте Exec-PHP
Несмотря на то, что этот плагин не обновлялся уже 7 лет, он прекрасно справляется с обязанностями. И я его выбрал не просто так – он не использует никаких шорткодов, как конкуренты, а дает возможность вставлять в записи WordPress код в чистом виде, начиная с .
Плагин Exec-PHP есть в репозитарии и устанавливается через меню в админке движка.
Из настроек есть только одна – разрешение/запрет на исполнение кода в текстовом виджете, возможности отключить работу в постах и на страницах отсутствует, если надо ее убрать – деактивируем плагин.
Для вставки PHP кода в статью, должен быть переведен в HTML режим (вкладка «Текст»). Визуальный режим, скорее всего, код попортит.
Выполнение PHP кода в статьях WordPress без плагина
По аналогии с виджетами, мы можем заменить плагин на специальную функцию, разрешающую выполнение PHP скриптов в контенте. К сожалению, мне не удалось найти вариант, при котором код работал бы автоматически как в случае с плагином, реагируя на теги. Требуется использование шорткода. Моих познаний в PHP не хватило для самостоятельного написания нужной функции, за сим привожу как есть. Работа с шорткодом имеет существенный недостаток, осложняющий работу, о нем я расскажу ниже.
Как работать с описанной ниже функцией
- Вставляем ее в файл functions.php темы;
- В нужном месте статьи вставляем конструкцию – исполняемый код без
Функция:
/* Запуск php в статьях и страницах WordPress: код */ function start_php($matches){ eval("ob_start();".$matches."$inline_execute_output = ob_get_contents();ob_end_clean();"); return $inline_execute_output; } function inline_php($content){ $content = preg_replace_callback("/\((.|\n)*?)\[\/startphp\]/", "start_php", $content); $content = preg_replace("/\((.|\n)*?)\[\/startphp\]/", "$1", $content); return $content; } add_filter("the_content", "inline_php");
/* Запуск php в статьях и страницах WordPress: код */ function start_php ($matches ) { eval ("ob_start();" . $matches [ 1 ] . "$inline_execute_output = ob_get_contents();ob_end_clean();" ) ; return $inline_execute_output ; function inline_php ($content ) { $content = preg_replace_callback ("/\((.|\n)*?)\[\/startphp\]/" , "start_php" , $content ) ; $content = preg_replace ("/\((.|\n)*?)\[\/startphp\]/" , "$1" , $content ) ; return $content ; add_filter ("the_content" , "inline_php" ) ; |
Недостаток
Если внутри вставляемого PHP кода есть HTML вставки или текст, то он работать не будет. Любой текст или теги придется вставлять с помощью команды echo, что не всегда удобно. То есть, код должен быть чисто PHP-шный на 100 правильного формата.
Правильно
Echo "Так работать будет";
[ startphp ] echo "Так работать будет" ; [ / startphp ] |
Неправильно
Echo "Эта строка правильная"; Так работать не будет
[ startphp ] echo "Эта строка правильная" ; < a href = "https://сайт" > Такработатьнебудет< / a > |
JavaScript regexp – это тип объекта, который используется для сопоставления последовательности символов в строках.
Создаем первое регулярное выражение
Существует два способа создания регулярного выражения: с использованием литерала регулярного выражения или с помощью конструктора регулярных выражений. Каждый из них представляет один и тот же шаблон: символ «c », за которым следует «a », а затем символ «t ».
// литерал регулярного выражения заключается в слэши (/)
var option1 = /cat/;
// Конструктор регулярнго выражения
var option2 = new RegExp("cat");
Как правило, если регулярное выражение остается константой, то есть не будет меняться, лучше использовать литерал регулярного выражения. Если оно будет меняться или зависит от других переменных, лучше использовать метод с конструктором.
Метод RegExp.prototype.test()
Помните, я говорил, что регулярные выражения являются объектами? Это означает, что у них есть ряд методов. Самый простой метод – это JavaScript regexp test , который возвращает логическое значение:
True (истина ): строка содержит шаблон регулярного выражения.
False (ложь ): совпадения не найдено.
console.log(/cat/.test(“the cat says meow”));
// верно
console.log(/cat/.test(“the dog says bark”));
// неверно
Памятка по основам регулярных выражений
Секрет регулярных выражений заключается в запоминании типовых символов и групп. Я настоятельно рекомендую потратить несколько часов на таблицу, приведенную ниже, а затем вернуться, и продолжить изучение.
Символы
- . – (точка ) соответствует любому одиночному символу за исключением переноса строки;
- * – соответствует предыдущему выражению, которое повторяется 0 или более раз;
- + – соответствует предыдущему выражению, которое повторяется 1 или более раз;
- ? – предыдущее выражение является необязательным (соответствует 0 или 1 раз );
- ^ – соответствует началу строки;
- $ – соответствует концу строки.
Группы символов
- d – соответствует любому одиночному цифровому символу.
- w – соответствует любому символу (цифре, букве или знаку подчёркивания).
- [XYZ ] – набор символов. Соответствует любому одиночному символу из набора, заданного в скобках. Также можно задавать и диапазоны символов, например, .
- [XYZ ]+ – соответствует символу из набора, повторяемого один или более раз.
- [^A —Z ] – внутри набора символов «^ » используется как знак отрицания. В данном примере шаблону соответствует всё, что не является буквами в верхнем регистре.
Флаги :
В JavaScript regexp существует пять необязательных флагов. Они могут использоваться отдельно или вместе, и размещаются после закрывающего слеша. Например: /[A —Z ]/g . Здесь я приведу только два флага.
g – глобальный поиск.
i – поиск, нечувствительный к регистру.
Дополнительные конструкции
(x ) – захватывающие скобки. Это выражение соответствует x и запоминает это соответствие, поэтому им можно воспользоваться позже.
(?:x ) – незахватывающие скобки. Выражение соответствует x , но не запоминает это соответствие.
Соответствует x , только если за ним следует y .
Протестируем изученный материал
Сначала протестируем все выше сказанное. Допустим, что мы хотим проверить строку на наличие любых цифр. Для этого можно использовать конструкцию «d ».
console.log(/d/.test("12-34"));
// верно
Приведенный выше код возвращает значение true , если в строке есть хотя бы одна цифра. Что делать, если нужно проверить строку на соответствие формату? Можно использовать несколько символов «d », чтобы определить формат:
console.log(/dd-dd/.test("12-34"));
//верно
console.log(/dd-dd/.test("1234"));
//неверно
Если неважно, как в JavaScript regexp online идут цифры до и после знака «— », можно использовать символ «+ », чтобы показать, что шаблон «d » встречается один или несколько раз:
console.log(/d+-d+/.test("12-34"));
// верно
console.log(/d+-d+/.test("1-234"));
// верно
console.log(/d+-d+/.test("-34"));
// неверно
Для простоты можно использовать скобки, чтобы сгруппировать выражения. Допустим, у нас есть мяуканье кошки, и мы хотим проверить соответствие шаблону «meow » (мяу ):
console.log(/me+(ow)+w/.test("meeeeowowoww"));
// верно
Теперь давайте разберемся.
m => соответствие одной букве ‘m ‘;
e + => соответствие букве «e» один или несколько раз;
(ow) + => соответствие буквам «ow» один или несколько раз;
w => соответствие букве ‘w ’;
‘m’ + ‘eeee’ + ‘owowow’ + ‘w’ .
Когда операторы типа «+ » используются сразу после скобок, они влияют на все содержимое скобок.
Оператор «? ». Он указывает, что предыдущий символ является необязательным. Как вы увидите ниже, оба тестовых примера возвращают значение true , потому что символы «s » помечены как необязательные.
console.log(/cats? says?/i.test("the Cat says meow"));
//верно
console.log(/cats? says?/i.test("the Cats say meow"));
//верно
Если вы захотите найти символ слеша, нужно экранизировать его с помощью обратного слеша. То же самое верно для других символов, которые имеют особое значение, например, вопросительного знака. Вот JavaScript regexp пример того, как их искать:
var slashSearch = ///;
var questionSearch = /?/;
- d – это то же самое, что и : каждая конструкция соответствует цифровому символу.
- w – это то же самое, что [A —Za —z 0-9_] : оба выражения соответствуют любому одиночному алфавитно-цифровому символу или подчеркиванию.
Пример: добавляем пробелы в строки, написанные в «верблюжьем » стиле
В этом примере мы очень устали от «верблюжьего » стиля написания и нам нужен способ добавить пробелы между словами. Вот пример:
removeCc("camelCase") // => должен вернуть "camel Case"
Существует простое решение с использованием регулярного выражения. Во-первых, нам нужно найти все заглавные буквы. Это можно сделать с помощью поиска набора символов и глобального модификатора.
Это соответствует символу «C » в «camelCase »
Теперь, как добавить пробел перед «C »?
Нам нужно использовать захватывающие скобки! Они позволяют найти соответствие и запомнить его, чтобы использовать позже! Используйте захватывающие скобки, чтобы запомнить найденную заглавную букву:
Получить доступ к захваченному значению позднее можно так:
Выше мы используем $1 для доступа к захваченному значению. Кстати, если бы у нас было два набора захватывающих скобок, мы использовали бы $1 и $2 для ссылки на захваченные значения и аналогично для большего количества захватывающих скобок.
Если вам нужно использовать скобки, но не нужно фиксировать это значение, можно использовать незахватывающие скобки: (?: x ). В этом случае находится соответствие x , но оно не запоминается.
Вернемся к текущей задаче. Как мы реализуем захватывающие скобки? С помощью метода JavaScript regexp replace ! В качестве второго аргумента мы передаем «$1 ». Здесь важно использовать кавычки.
function removeCc(str){
return str.replace(/()/g, "$1");
}
Снова посмотрим на код. Мы захватываем прописную букву, а затем заменяем ее той же самой буквой. Внутри кавычек вставим пробел, за которым следует переменная $1 . В итоге получаем пробел после каждой заглавной буквы.
function removeCc(str){
return str.replace(/()/g, " $1");
}
removeCc("camelCase") // "camel Case"
removeCc("helloWorldItIsMe") // "hello World It Is Me"
Пример: удаляем заглавные буквы
Теперь у нас есть строка с кучей ненужных прописных букв. Вы догадались, как их удалить? Во-первых, нам нужно выбрать все заглавные буквы. Затем используем поиск набора символов с помощью глобального модификатора:
Мы снова будем использовать метод replace , но как в этот раз сделать строчной символ?
function lowerCase(str){
return str.replace(//g, ???);
}
Подсказка : в методе replace () в качестве второго параметра можно указать функцию.
Мы будем использовать стрелочную функцию, чтобы не захватывать значение найденного совпадения. При использовании функции в методе JavaScript regexp replace эта функция будет вызвана после поиска совпадений, и результат функции используется в качестве замещающей строки. Еще лучше, если совпадение является глобальным и найдено несколько совпадений — функция будет вызвана для каждого найденного совпадения.
function lowerCase(str){
return str.replace(//g, (u) => u.toLowerCase());
}
lowerCase("camel Case") // "camel case"
lowerCase("hello World It Is Me") // "hello world it is me"
Пример: преобразуем первую букву в заглавную
capitalize("camel case") // => должен вернуть "Camel case"
Еще раз воспользуемся функцией в методе replace(). Однако на этот раз нам нужно искать только первый символ в строке. Напомним, что для этого используется символ «^ ».
Давайте на секунду задержимся на символе «^ ». Вспомните пример, приведенный ранее:
console.log(/cat/.test("the cat says meow"));
//верно
При добавлении символа «^ » функция больше не возвращает значение true , поскольку слово «cat » находится не в начале строки.
В JavaScript регулярные выражения представлены объектами RegExp . Объекты RegExp могут быть созданы посредством конструктора RegExp(), но чаще они создаются с помощью специального синтаксиса литералов. Так же как строковые литералы задаются в виде символов, заключенных в кавычки, литералы регулярных выражений задаются в виде символов, заключенных в пару символов слэша / .
/pattern/флаги new RegExp("pattern"[, опции поиска])
pattern - регулярное выражение для поиска (о замене - позже), а флаги - строка из любой комбинации символов g(глобальный поиск), i(регистр неважен) и m(многострочный поиск). Первый способ используется часто, второй - иногда. Например, два таких вызова эквивалентны.
Опции поиска
При создании регулярного выражения мы можем указать дополнительных опции поиска
Символы в регулярных выражениях JavaScript
Символ | Соответствие |
---|---|
Алфавитно-цифровые символы | Соответствуют сами себе |
\0 | Символ NUL (\u0000) |
\t | Табуляция (\u0009) |
\n | Перевод строки (\u000A) |
\v | Вертикальная табуляция (\u000B) |
\f | Перевод страницы (\u000C) |
\r | Возврат каретки (\u000D) |
\xnn | Символ из набора Latin, задаваемый шестнадцатеричным числом nn; например, \x0A - это то же самое, что \n |
\uxxxx | Unicode-символ, заданный шестнадцатеричным числом xxxx; например, \u0009 - это то же самое, что \t |
\cX | Управляющий символ "X", например, последовательность \cJ эквивалентна символу перевода строки \n |
\ | Для обычных символов - делает их специальными. Например, выражение /s/ ищет просто символ "s". А если поставить \ перед s, то /\s/ уже обозначает пробельный символ.И наоборот, если символ специальный, например *, то \ сделает его просто обычным символом "звездочка". Например, /a*/ ищет 0 или больше подряд идущих символов "a". Чтобы найти а со звездочкой "a*" - поставим \ перед спец. символом: /a\*/ . |
^ | Обозначает начало входных данных. Если установлен флаг многострочного поиска ("m") , то также сработает при начале новой строки.Например, /^A/ не найдет "A" в "an A", но найдет первое "A" в "An A." |
$ | Обозначает конец входных данных. Если установлен флаг многострочного поиска, то также сработает в конце строки.Например, /t$/ не найдет "t" в "eater", но найдет - в "eat". |
* | Обозначает повторение 0 или более раз. Например, /bo*/ найдет "boooo" в "A ghost booooed" и "b" в "A bird warbled", но ничего не найдет в "A goat grunted". |
+ | Обозначает повторение 1 или более раз. Эквивалентно {1,} . Например, /a+/ найдет "a" в "candy" и все "a" в "caaaaaaandy". |
? | Обозначает, что элемент может как присутствовать, так и отсутствовать. Например, /e?le?/ найдет "el" в "angel" и "le" в "angle."Если используется сразу после одного из квантификаторов * , + , ? , или {} , то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна), в противоположность "жадному" режиму по умолчанию, при котором количество повторений максимально, даже если следующий элемент паттерна тоже подходит.Кроме того, ? используется в предпросмотре, который описан в таблице под (?=) , (?!) , и (?:) . |
. | (Десятичная точка) обозначает любой символ, кроме перевода строки: \n \r \u2028 or \u2029. (можно использовать [\s\S] для поиска любого символа, включая переводы строк). Например, /.n/ найдет "an" и "on" в "nay, an apple is on the tree", но не "nay". |
(x) | Находит x и запоминает. Это называется "запоминающие скобки". Например, /(foo)/ найдет и запомнит "foo" в "foo bar." Найденная подстрока хранится в массиве-результате поиска или в предопределенных свойствах объекта RegExp: $1, ..., $9 .Кроме того, скобки объединяют то, что в них находится, в единый элемент паттерна. Например, (abc)* - повторение abc 0 и более раз. |
(?:x) | Находит x , но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp.Как и все скобки, объединяют находящееся в них в единый подпаттерн. |
x(?=y) | Находит x , только если за x следует y . Например, /Jack(?=Sprat)/ найдет "Jack", только если за ним следует "Sprat". /Jack(?=Sprat|Frost)/ найдет "Jack", только если за ним следует "Sprat" или "Frost". Однако, ни "Sprat" ни "Frost" не войдут в результат поиска. |
x(?!y) | Находит x , только если за x не следует y . Например, /\d+(?!\.)/ найдет число, только если за ним не следует десятичная точка. /\d+(?!\.)/.exec("3.141") найдет 141, но не 3.141. |
x|y | Находит x или y . Например, /green|red/ найдет "green" в "green apple" и "red" в "red apple." |
{n} | Где n - положительное целое число. Находит ровно n повторений предшествующего элемента. Например, /a{2}/ не найдет "a" в "candy," но найдет оба a в "caandy," и первые два a в "caaandy." |
{n,} | Где n - положительное целое число. Находит n и более повторений элемента. Например, /a{2,} не найдет "a" в "candy", но найдет все "a" в "caandy" и в "caaaaaaandy." |
{n,m} | Где n и m - положительные целые числа. Находят от n до m повторений элемента. |
Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, - то же самое, что . Найдет "b" в "brisket", а также "a" и "c" в "ache". | |
[^xyz] | Любой символ, кроме указанных в наборе. Вы также можете указать промежуток. Например, [^abc] - то же самое, что [^a-c] . Найдет "r" в "brisket" и "h" в "chop." |
[\b] | Находит символ backspace. (Не путать с \b .) |
\b | Находит границу слов (латинских), например пробел. (Не путать с [\b]). Например, /\bn\w/ найдет "no" в "noonday"; /\wy\b/ найдет "ly" в "possibly yesterday." |
\B | Обозначает не границу слов. Например, /\w\Bn/ найдет "on" в "noonday", а /y\B\w/ найдет "ye" в "possibly yesterday." |
\cX | Где X - буква от A до Z. Обозначает контрольный символ в строке. Например, /\cM/ обозначает символ Ctrl-M. |
\d | находит цифру из любого алфавита (у нас же юникод). Испльзуйте , чтобы найти только обычные цифры. Например, /\d/ или // найдет "2" в "B2 is the suite number." |
\D | Найдет нецифровой символ (все алфавиты). [^0-9] - эквивалент для обычных цифр. Например, /\D/ или /[^0-9]/ найдет "B" в "B2 is the suite number." |
\s | Найдет любой пробельный символ, включая пробел, табуляцию, переводы строки и другие юникодные пробельные символы. Например, /\s\w*/ найдет " bar" в "foo bar." |
\S | Найдет любой символ, кроме пробельного. Например, /\S\w*/ найдет "foo" в "foo bar." |
\v | Символ вертикальной табуляции. |
\w | Найдет любой словесный (латинский алфавит) символ, включая буквы, цифры и знак подчеркивания. Эквивалентно . Например, /\w/ найдет "a" в "apple," "5" в "$5.28," и "3" в "3D." |
\W | Найдет любой не-(лат.)словесный символ. Эквивалентно [^A-Za-z0-9_] . Например, /\W/ и /[^$A-Za-z0-9_]/ одинаково найдут "%" в "50%." |
Работа с регулярными выражениями в Javascript
Работа с регулярными выражениями в Javascript реализована методами класса String
exec(regexp) - находит все совпадения (вхождения в шаблон "регулярки") в строке. Возвращает массив (при совпадении) и обновляет свойство regexp-а, или null - если ничего не найдено,. С модификатором g - при каждом вызове этой функции, она будет возвращать следующее совпадение после предыдущего найденного - это реализовано с помощью ведения индекса смещения последнего поиска.
match(regexp) - найти часть строки по шаблону. Если указан модификатор g, то функция match() возвращает массив всех совпадений или null (а не пустой массив). Без модификатора g эта функция работает как exec();
test(regexp) - функция проверяет строку на соответствие шаблону. Возвращает true - если есть совпадение, и false - если совпадения нет.
split(regexp) - разбивает строку, для которой он вызван, на массив подстрок, используя аргумент в качестве разделителя.
replace(regexp, mix) - метод возвращает строку изменную в соответствии с шаблоном (регуляррным выражением). Первый параметр regexp также может содержать строку, а не регулярное выражение. Без модификатора g - метод в строке заменяет только первое вхождение; с модификатором g - происходит глобальная замена, т.е. меняются все вхождения в данной строке. mix - шаблон замены, может принитать значения строки, шаблона замены, функции (имя функции).
Спецсимволы в строке замены
Замена через функцию
Если Вы указываете вторым параметром функцию, то она выполняется при каждом совпадении. В функции можно динамически генерировать и возвращать строку подстановки. Первый параметр функции - найденная подстрока. Если первым аргументом replace является объект RegExp, то следующие n параметров содержат совпадения из вложенных скобок. Последние два параметра - позиция в строке, на которой произошло совпадение и сама строка.