Регулярни изрази - Програмиране от
Регулярните изрази са шаблони за търсене на дадени комбинации от знаци в текстови низове (такова търсене се нарича съвпадение по шаблон). Има два начина за присвояване на регулярни изрази на променливи, а именно:
Използване на инициализатор на обект: var re = /pattern/switch?.
Използване на конструктора RegExp: var re = new RegExp("pattern"[,"switch"]?). Тук шаблонът е регулярен израз, а превключвателят е незадължителна опция за търсене.
Инициализаторите на обекти, като var re = /ab+c/, трябва да се използват в случаите, когато стойността на регулярния израз остава непроменена, докато скриптът работи. Такива регулярни изрази се компилират по време на зареждането на скрипта и следователно се изпълняват по-бързо.
Извикване на конструктор като var re = new RegExp("ab+c") трябва да се използва, когато стойността на променливата ще се промени. Ако ще използвате регулярния израз многократно, тогава има смисъл да го компилирате с метода за компилиране за по-ефективно съвпадение на шаблони.
Когато създавате регулярен израз, имайте предвид, че затварянето му в кавички води до необходимостта от използване на екраниращи последователности, точно както всяка друга низова константа. Например следните два израза са еквивалентни:
var re = /\w+/g; var re = new RegExp("\\w+", "g"); // В низа "\" трябва да се замени с "\\"
Регулярните изрази се използват от методите exec и test на обекта RegExp и от методите за съпоставяне, заместване, търсене и разделяне на обекта String. Ако просто трябва да проверим дали даден низ съдържа подниз, който съответства на шаблон, тогава се използват методите a href="/cgi-bin/print.pl? >test или търсене. Ако трябва да извлечемподниз (или поднизове), съответстващ на шаблона, тогава трябва да използваме методите exec или match. Методът replace търси даден подниз и го заменя с друг низ, докато методът split ви позволява да разделите низ на множество поднизове въз основа на регулярен израз или обикновен текстов низ. За повече информация относно използването на регулярни изрази вижте описанията на съответните методи.
Синтаксис на регулярен израз
Регулярният израз може да се състои от регулярни знаци; в този случай ще съответства на дадената комбинация от знаци в низа. Например, изразът /kom/ съвпада с избраните поднизове в следните редове: "буца", "гурме", "главнокомандващ на флота". Въпреки това, гъвкавостта и силата на регулярните изрази идва от възможността да се използват специални знаци в тях, които са изброени в следващата таблица.
\ |
() (?:) (?=) (?!) [] |
* + ? . n> n,> n,m> |
^ $ \ метасимвол |
Когато създаваме регулярен израз, можем да посочим допълнителни опции за търсене:
i (пренебрегване на главни и малки букви). Не правете разлика между малки и главни букви.
g (глобално търсене). Глобално търсене за всички срещания на шаблона.
m (многоредов). Многоредово търсене.
Всяка комбинация от тези три опции, като ig или gim.
Поддръжка: | Опцията "m" се поддържа от версия 5.5. | |
Опцията "m" не се поддържа. Вместо това се използва статичното многоредово свойство на обекта RegExp. |
Нека вземем няколко примера. Тъй като регулярните изрази правят разлика между малки букви иглавни букви, следният скрипт
показва следния текст в прозореца на браузъра:
Ако сега заменим втория ред на примера с var re = /JAVA/i;, тогава на екрана ще се покаже следният текст:
Сега разгледайте опцията за глобално търсене. Обикновено се използва от метода replace при търсене на модел и замяна на намерения подниз с нов. Работата е там, че по подразбиране този метод замества само първия намерен подниз и връща резултата. Помислете за следния сценарий:
Включено показва текст в прозореца на браузъра, който очевидно не отговаря на желания резултат:
Ние пишем скриптове на VBScript, но VBScript не е единственият скриптов език.
И накрая, опцията за многоредово търсене ви позволява да съвпадате с шаблон на низов израз, състоящ се от множество редове текст, свързани с прекъсвания на редове. По подразбиране съпоставянето на образец спира, ако бъде намерен знак за нов ред. Тази опция преодолява указаното ограничение и осигурява търсене на модел в целия изходен низ. Той също така засяга интерпретацията на някои специални знаци в регулярните изрази, а именно:
Обикновено знакът ^ съвпада само с първия елемент на низ. Ако опцията за многоредово търсене е активирана, тогава тя също така съвпада с всеки елемент от низа, предшестван от знак за нов ред.
Обикновено знакът $ съвпада само с последния елемент на низ. Ако опцията за многоредово търсене е активирана, тогава тя също отговаря на всеки елемент от низа, който е символ за нов ред.
Съхраняване на намерени поднизове
Ако част от регулярния израз е оградена в скоби, тогава съответният подниз ще бъде запомненза по-късна употреба. Съхранените поднизове се осъществяват чрез свойствата $1, :, $9 на обекта RegExp или елементите на масива, върнат от методите exec и match. В последния случай броят на намерените и съхранени поднизове не е ограничен.
Например, следният скрипт използва метода replace за пренареждане на думите в низ. Свойствата $1 и $2 се използват за замяна на намерения текст.
var re = /(\w+)\s(\w+)/; var str = "Михаил Булгаков"; document.write(str.replace(re, "$2, $1"))
Този скрипт ще покаже следния текст в прозореца на браузъра: