С помощью регулярных выражений Вы можете производить поиск слов в текстах.
ТвитнутьРегулярные выражения позволяют производить гибкий поиск слов и выражений в текстах с целью их удаления, извлечения или замены.
Синтаксис:
//Первый вариант создания регулярного выражения var regexp=new RegExp(шаблон,модификаторы); //Второй вариант создания регулярного выражения var regexp=/шаблон/модификаторы;
шаблон позволяет задать шаблон символов для поиска.
модификаторы позволяют настроить поведение поиска:
Самым простым применением регулярных выражений является поиск слов и выражений в различных текстах.
Приведем пример использования поиска с применением модификаторов:
//Зададим регулярное выражение rv1 rv1=/Россия/; //Зададим регулярное выражение rv2 rv2=/Россия/g; //Зададим регулярное выражение rv3 rv3=/Россия/ig; //Жирным шрифтом выделено, где в тексте будут найдены совпадения при использовании //выражения rv1: Россия является крупнейшим государством мира. Россия граничит с 18 странами. РОССИЯ является государством-продолжателем СССР. //Жирным шрифтом выделено, где в тексте будут найдены совпадения при использовании //выражения rv2: Россия является крупнейшим государством мира. Россия граничит с 18 странами. РОССИЯ является государством-продолжателем СССР."; //Жирным шрифтом выделено, где в тексте будут найдены совпадения при использовании //выражения rv3: Россия является крупнейшим государством мира. Россия граничит с 18 странами. РОССИЯ является государством - продолжателем СССР.";
Помимо обычных символов в шаблонах регулярных выражений могут использоваться специальные символы (метасимволы). Специальные символы с описаниями приведены в таблице ниже:
Специальный символ | Описание |
---|---|
. | Совпадает с любым символом, кроме символа конца строки. |
\w | Совпадает с любым буквенным символом. |
\W | Совпадает с любым не буквенным символом. |
\d | Совпадает с символами, которые являются цифрами. |
\D | Совпадает с символами, которые не являются цифрами. |
\s | Совпадает с пробельными символами. |
\S | Совпадает с не пробельными символами. |
\b | Совпадения будут искаться только на границах слов (в начале или конце). |
\B | Совпадения будут искаться только не на границах слов. |
\n | Совпадает с символом перевода строки. |
Пример
/* Выражение reg1 найдет все слова начинающиеся на две произвольные буквы и заканчивающиеся на 'вет'. Так как слова в предложении разделяются пробелом, то в начале и в конце добавим спецсимвол \s) */ reg1=/\s..вет\s/g; txt=' привет завет вельвет клозет '; document.write(txt.match(reg1) + '<br />'); /* Выражение reg2 найдет все слова начинающиеся на три произвольные буквы и заканчивающиеся на 'вет' */ reg2=/\s...вет\s/g; document.write(txt.match(reg2) + '<br />'); txt1=' при2вет привет при1вет '; /* Выражение reg3 найдет все слова, которые начинаются на 'при' в которых потом следует 1 цифра и заканчиваются на 'вет' */ var reg3=/при\dвет/g; document.write(txt1.match(reg3) + '<br />'); // Выражение reg4 найдет все цифры в тексте var reg4=/\d/g; txt2='5 лет учебы, 3 года плавания, 9 лет стрельбы.' document.write(txt2.match(reg4) + '<br />');
Используя квадратные скобки [кейу] Вы можете указать группу символов, поиск которых нужно произвести.
Символ ^ перед группой символов в квадратных скобках [^квг] говорит о том, что нужно произвести поиск всех символов алфавита кроме заданных.
Используя тире (-) между символами в квадратных скобках [а-з] Вы можете задать диапазон символов, поиск которых нужно произвести.
С помощью квадратных скобок [012] Вы можете также искать числа.
Пример
//Зададим регулярное выражение reg1 reg1=/\sко[тдм]\s/g; //Зададим строку текста txt1 txt1=' кот коса код комод ком ковер '; //Произведем с помощью регулярного выражения reg1 поиск по строке txt1 document.write(txt1.match(reg1) + '<br />'); reg2=/\sсло[^тг]/g; txt2=" слот слон слог "; document.write(txt2.match(reg2) + '<br />'); reg3=/[0-9]/g; txt3="5 лет учебы, 3 года плавания, 9 лет стрельбы"; document.write(txt3.match(reg3));
Квантификатор - это конструкция позволяющая задать сколько раз предшествующий ей символ или группа символов должна встречаться в совпадение.
Синтаксис:
//Предшествующий символ должен встречаться x - раз {x} //Предшествующий символ должен встречаться от x до у раз включительно {x,y} //Предшествующий символ должен встречаться не менее x раз {x,} //Указывает, что предшествующий символ должен встречаться 0 или более раз * //Указывает что предшествующий символ должен встречаться 1 или более раз + //Указывает что предшествующий символ должен встречаться 0 или 1 раз ?
//Зададим регулярное выражение rv1 rv1=/ко{5}шка/g //Зададим регулярное выражение rv2 rv2=/ко{3,}шка/g //Зададим регулярное выражение rv3 rv3=/ко+шка/g //Зададим регулярное выражение rv4 rv4=/ко?шка/g //Зададим регулярное выражение rv5 rv5=/ко*шка/g //Жирным шрифтом показано, где в тексте будут найдены совпадения при использовании //выражения rv1: кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка //Жирным шрифтом показано, где в тексте будут найдены совпадения при использовании //выражения rv2: кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка //Жирным шрифтом показано, где в тексте будут найдены совпадения при использовании //выражения rv3: кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка //Жирным шрифтом показано, где в тексте будут найдены совпадения при использовании //выражения rv4: кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка //Жирным шрифтом показано, где в тексте будут найдены совпадения при использовании //выражения rv5: кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка
Обратите внимание: если Вы хотите использовать какой-либо специальный символ (такой как . [] * + ? или {}) как обычный Вы должны поставить перед ним \.
Заключая часть шаблона регулярного выражения в круглые скобки Вы указываете выражению запомнить совпадение, найденное этой частью шаблона. Сохраненное совпадение может использоваться позднее в Вашем коде.
К примеру регулярное выражение /(Дмитрий)\sВасильев/ найдет строку 'Дмитрий Васильев' и запомнит подстроку 'Дмитрий'.
В примере ниже мы используем метод replace(), чтобы изменить порядок слов в тексте. Для обращения к сохраненным совпадениям мы используем $1 и $2.
Пример
var regexp = /(Дмитрий)\s(Васильев)/; var text = 'Дмитрий Васильев'; var newtext = text.replace(regexp, '$2 $1'); document.write(newtext);
Круглые скобки могут использоваться для группировки символов перед квантификаторами.
Пример
txt='хохохо хахаха хихихи'; regex1=/(ха){3}/g; document.write(txt.match(regex1));
Круглые скобки также используются для поиска альтернатив.
Пример
txt=" яблоко, банан, картошка, груша, перец "; regex1=/(яблоко|банан|груша)/ig; document.write(txt.match(regex1));
С помощью метода exec() Вы можете производить поиск желаемого значения. Метод возвращает найденное значение.
Пример
//Зададим регулярное выражение rv1 rv1=/ко{5}шка/g //Зададим строку текста, в котором будем искать совпадения txt='кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка'; document.write(rv1.exec(txt));
С помощью метода test() Вы можете проверить содержится ли в тексте выражение заданное в регулярном выражении. Если выражение содержится в тексте метод возвращает true, а если нет false.
Пример
//Зададим регулярное выражение rv1 rv1=/ко{5}шка/g //Зададим строку текста, в котором будем искать совпадения txt='кшка кошка коошка кооошка коооошка кооооошка коооооошка кооооооошка'; //Произведем поиск по шаблону rv1 в строке текста txt document.write(rv1.test(txt) + '<br />'); //Зададим регулярное выражение rv2 rv2=/тигр/g; //Произведем поиск по шаблону rv2 в строке текста txt document.write(rv2.test(txt));
Обратите внимание: полный список свойств и методов данного объекта Вы можете найти в нашем JavaScript справочнике.
Задание 1. Создайте регулярное выражение способное найти в тексте слова выделенные жирным шрифтом (подробности в редакторе):
Задание 1
regex1=/Задайте регулярное выражение здесь/; document.write('<b>'+txt.match(regex1)+'</b>');