Javascript, примери за регулярен израз, проверка на регулярен израз
RegExp обект = шаблон + двигател
Модел на регулярен израз
Допускат се две опции:
var expOne = /abc*/i;
var expTwo = RegExp("abc*", "i");
Обикновено се използва първият метод. Във втория случай се използват кавички, следователно, за да използвате знака '\', той трябва да бъде екраниран според общите правила.
'i' е флаг, обозначаващ "нечувствителен към регистър". Можете също така да използвате флаговете 'g' - "глобално търсене" и 'm' - многоредово търсене.
Знакът '/' обикновено се използва за обозначаване на модел.
Начало и край на регулярен израз
Знакът '^' указва знака(ите), с които започва регулярният израз, а знакът '$' указва кой(те) знак(ове) трябва да завършва. Не трябва да експериментирате с тях вътре в израза, там те имат различно значение.
var eRegExp = new RegExp(cRegExp, 'i');
var sTest = 'AbcZ';
var dTestLine = document.getElementById('scTestLine');
dTestLine.innerHTML = 'Израз /'+cRegExp+'/ за низ "'+ sTest+'"'+cRegRes.
Елементът 'scTestLine' ще съдържа резултата (променливата cRegExp има съответната стойност):
израз /^AbcZ$/ за низ "abcz" - Да
Ако флагът „i“ бъде премахнат, резултатът ще бъде:
израз /^AbcZ$/ за низ "abcz" - No
Съдържание на регулярен израз
Регулярният израз е поредица от знаци, която е обект на търсене. Изразът /qwerty/ търси срещане на точно тази последователност:
израз /qwerty/ за низ "qwerty" - Да
израз /qwerty/ за низ "123qwerty456" - Да
Символът '^' променя същността на израза:
израз /^qwerty/ за низ "123qwerty456" – No
израз /^qwerty/ за низ "qwerty456" - Да
По същия начин за знака за край на реда. Регулярните изрази позволяват поредици: например [a-z], [A-Z], [0-9] - всички букви от латинската азбука в посочения регистър или цифри. Разрешено е използването и на български букви, но трябва да се обърне внимание на кодирането на низовете (къде се търси, какво се търси) и страницата. Често българските букви, както и специалните символи, за предпочитане са добавени с кодове.
При формиране на регулярен израз можете да зададете опции за присъствието на определени символи на определено място, като техният брой се задава както следва: '*' = повторение 0 или повече пъти; '+' = повторете 1 или повече пъти; същото като '+'; = повторете точно n пъти; = повторение n или повече пъти; = повторете n до m пъти.
Използвайки квадратни скоби, можете да посочите варианти на знак от набор. Изглежда така. [abcd] = [a-d] = всеки от четирите знака: 'a', 'b', 'c' или 'd'. Можете да посочите обратното. Всеки знак, различен от посочените в набора: [^abcd] = всеки знак, различен от 'a', 'b', 'c' или 'd'. "?" показва, че персонажът може или не може да присъства на даденото място. '.' дефинира всеки символ, различен от нов ред. Това е „\n“, „\r“, „\u2028“ или „\u2029“. Изразът '\s*\S*' = '[\s\S]*' означава търсене на произволен знак, включително нови редове.
Опростени регулярни изрази
Изразът '[\s\S]*' търси интервал или липсата му, тоест всичко, което е в низа. В този случай нотацията '\s' означава интервал, а '\S' означава липса на интервал.
По същия начин можете да използвате '\d', за да намерите десетична цифра, и '\D', за да намерите нецифрен знак. Нотацията '\f', 'r' и '\n' съответства на подаване на формуляр, връщане на каретка и подаване на ред.
Табулаторът е '\t', вертикалният знак е '\v'. Обозначаване'\w' съответства на всеки латински знак (букви, цифри, долна черта) = [A-Za-z0-9_].
Нотацията '\W' е еквивалентна на [^A-Za-z0-9_]. Това означава всеки знак, който не е буква от латинската азбука, цифра или знак „_“.
Търсене на символ '\0' = търсене на NUL знак. Търсене '\xHH' или '\uHHHH' = търсене на знак с код съответно HH или HHHH. H е шестнадесетична цифра.
Препоръчителна формулировка и кодиране на регулярния израз
Важно е внимателно да тествате всеки регулярен израз на различни варианти на низове.
С опит в създаването на регулярни изрази ще има по-малко грешки, но въпреки това винаги трябва да имате предвид, че вашите собствени познания за правилата за писане на регулярен израз може да не са верни, особено когато „regex“ се прехвърля от един език на друг.
Когато обработвате знаци, които не принадлежат към латинската азбука, има смисъл да обмислите указването на кодове на знаци, а не самите знаци.
Скоби в регулярни изрази
Квадратните скоби указват варианти на знак, които трябва да присъстват или отсъстват на определено място, а скобите указват варианти на последователности. Но това е само общо правило. Няма изключения от него, но има много различни приложения.
var cRegExp = "[a-z]*.(pngjpggif)";
var eRegExp = new RegExp(cRegExp, 'i');
var sTest = 'picture.jpg';
израз /[a-z]*.(pngjpggif)/ за низ "картина.jpg" - Да
израз /^[a-d][a-z]*.(pngjpggif)/ за низ "picture.jpg" – Не
израз /^[a-d][a-z]*.(pngjpggif)/ за низ "apicture.jpg" - Да
израз /^[a-d][a-z]*.(pngjpggif)/ за низ "apicture.jg" - Не
Специално трябва да се отбележи, че всичко, след което си струвазвездичка, може да присъства нула пъти. Това означава, че "редовният сезон" може да работи поне по най-неочаквания начин.
Валидиране на RegExp - Тестване по имейл
Тестовият метод вече е демонстриран, той ви позволява да проверите валидността на регулярен израз. Резултат от метода: вярно/невярно.
Практическа употреба: обработка на електронна поща
Методът exec предоставя масив на изход, извиквайки:
var aResult = eRegExp.exec(sTest);
дава този резултат:
Популярни редовни клиенти
Изразът /^\d+$/i ще проверява само цифри, докато изразът /^\d+\.\d+$/i ви позволява да използвате точка, за да посочите дробната част на числото.
Проверка на дата – почти сложното
Ефективността и удобството на регулярните изрази зависят основно от цялостната конструкция на диалога с посетителя. В един случай е препоръчително да използвате едно поле за въвеждане на формуляра, за да посочите датата, в другия случай трябва да предоставите различни полета за ден, месец и година. Но тогава ще има допълнителни "разходи за код" за проверка на високосната година, броя на месеците, броя на дните в тях.
Търсене със замяна, памет за регулярен израз
var cRegExp = /([a-z]+)\s([a-z]+)\s([a-z]+)/i; // търсенето създава три „променливи“
var dTestLine = document.getElementById('scTestLine');
dTestLine.innerHTML = 'Изразът '+cRegExp+' за низа "'+ sTest+'" ще бъде: '+cRegRes;
Когато се изпълни, всяка двойка скоби съхранява резултата в 'променливата' $n, където n е номерът на двойката скоби ($1, $2, . ). За разлика от общоприетото, тук номерирането на променливите се извършва от 1, а не от 0.
Общи препоръки
Регулярният израз опростява кода, но времето за разработка често е от съществено значение. Можете да започнетеработете с прости конструкции, след това комбинирайте направеното в по-сложни изрази. Можете да използвате различни онлайн услуги за проверка на регулярни изрази или специални локални инструменти.
Най-добрият вариант би бил да създадете своя собствена библиотека от регулярни изрази и свой собствен инструмент за тестване на нови разработки. Това е най-добрият начин да консолидирате опит и да научите как бързо да създавате надеждни и удобни дизайни.
Въпреки това, не във всички случаи, дебъгерът може да управлява и да предостави на разработчика добра поддръжка, бързо откриване на грешки и откриване на тесни места. Времената, когато компютърът беше фокусиран върху изчисленията, са в далечното минало. Сега акцентът е върху информацията и низовите обекти започнаха да играят важна роля. Числата са се превърнали в струни и показват истинската си същност само в точното време и на точното място.
Регулярните изрази увеличават силата на низовете, но изискват дължимото уважение. Отстраняването на грешки в RegExp, докато работи, дори и да е възможно да се симулира, не е много интересно начинание.