Јавасцрипт, регуларни израз: примери, провера регуларних израза
Пре доласка хипертекстуалних језика, већ преу тренутку када је постало јасно да је неопходно не само да се тражи, већ и да се то ради под одређеним условима, на одређеном месту, са измењеним подацима, у правим количинама, уобичајене функције за претраживање и замјену које одговара било којем искусном програмеру. У програмским језицима створене су мастерпиецес искусне уметности, а базе података су пречишћене у облику услова узорковања, опремљене са ускладиштеним процедурама, окидачима и другим средствима за узимање узорака из гломазних релационих информација. Појава редовних израза није довела до револуције, али се испоставило да је корисно и погодно средство за проналажење и замену информација. На пример, регуларни изрази ЈаваСцрипт е-поште значајно поједностављују регистрацију посетилаца, не учитајте сајт слањем порука на непостојеће адресе.
Рецимо да је ЈаваСцрипт регуларни изразНемогуће је размишљати много боље од претпостављених секвенци индексаОф () у оквиру условних и цикличних оператора, али се може рећи да је скрипт код направио компактан али слабо разумљен од стране неизвјесних.
РегЕкп објецт = темплате + енгине
Редовни изрази су шаблон + мотор. Први је сам регуларни израз - објекат ЈаваСцрипт је РегЕкп, други је извршитељ шаблона који га примјењује на низ. Мотори који имплементирају регуларне изразе за сваки програмски језик су различити. Иако нису све разлике значајне, мора се имати на уму, као и пажљиво провјерити регуларни израз прије кориштења.
Посебна нотација при писању регуларних изразаприлично згодан и ефикасан, али захтева од бриге, тачности и стрпљења од програмера. Морате се навикнути на нотацију узорака регуларног израза. Ово није мудрост, то је логика имплементације механизма "регуларних израза ЈаваСцрипт-а".
Регуларни образац
Дозвољене су две опције:
вар екпОне = / абц * / и;
вар екпТво = РегЕкп ("абц *", "и");
Први метод се обично користи. У другом случају, користе се наводници, јер да би се користио симбол "", мора се избјећи у складу с општим правилима.
"и" је застава за "случај није важан." Можете користити и заставице "г" - "глобално претраживање" и "м" - претрага на више линија.
Симбол "/" се користи за означавање шаблона.
Почетак и крај регуларног израза
Симбол "^" означава симбол (и) из когаредовни израз почиње, а "$" одређује који карактер (и) треба да буде на крају. Не би требало да експериментишете са њима унутар израза, ту имају другачије значење.
На пример,
вар еРегЕкп = нови РегЕкп (цРегЕкп, "и");
вар цРегРес = "";
вар сТест = "АбцЗ";
ако (еРегЕкп.тест (сТест)) {
цРегРес + = "- Да";
} елсе {
цРегРес + = "- Не";
}
вар дТестЛине = доцумент.гетЕлементБиИд ("сцТестЛине");
дТестЛине.иннерХТМЛ = "Израз /" + цРегЕкп + "/ за низ" "+ сТест +" "" + цРегРес.
У елементу "сцТестЛине" ће доћи до резултата (варијабла цРегЕкп има одговарајућу вриједност):
израз / ^ АбцЗ $ / за низ "абцз" - Да
Ако уклоните заставицу "и", резултат ће бити:
израз / ^ АбцЗ $ / за низ "абцз" - Не
Садржај регуларног израза
Редовни израз је низ знакова који су предмет претраге. Израз / кверти / тражи улазак ове посебне секвенце:
израз / кверти / за низ "кверти" - Да
израз / кверти / за стринг "123кверти456" - Да
Симбол "^" мења суштину израза:
израз / ^ кверти / за низ "123кверти456" - Не
израз / ^ кверти / за низ "кверти456" - Да
Слично томе, за крај карактера линије. Редовни изрази дозвољавају секвенце: на пример, [а-з], [АЗ], [0-9] - сва слова латинске абецеде у наведеном регистру или бројевима. Такође се могу користити руска слова, али треба обратити пажњу на кодирање жица (где се тражи, шта се тражи) и странице. Често руска слова, као и специјални карактери, пожељно је поставити кодове.
Када формирате регуларни израз, можетенавести опције за присуство одређених знакова на одређеном месту, док је њихов број постављен на следећи начин: "*" = понавља 0 или више пута; "+" = понавља се 1 или више пута; {1,} је исти као "+"; {н} = понавља тачно н пута; {н,} = понавља н или више пута; {н, м} = поновити од н до м пута.
Помоћу квадратних заграда можете одредитикарактерне опције из скупа. Изгледа овако. [абцд] = [а-д] = било који од четири карактера: "а", "б", "ц" или "д". Можете одредити супротно. Сваки знак осим оних наведених у скупу: [^ абцд] = било који знак осим "а", "б", "ц" или "д". "?" означава да на овом месту можда нема карактера. "." дефинише било који други знак осим што означава прекид линије. То су "н", "р", "у2028" или "у2029". Израз "с * | С *" = "[с | С] *" значи претраживање било ког карактера, укључујући прекид линија.
Поједностављене регуларне изразне опције
Израз "[с | С] *" је потрага за простором или његовим одсуством, то јест, све што је у низу. У овом случају симбол "с" означава простор, а "С" - његово одсуство.
Слично томе, можете користити "д" за претраживање децималне цифре, а "Д" ће пронаћи неноминациони знак. Ознака "ф", "р" и "н" одговара враћању форми-феед-а, повратку колица и линији-феед-у.
Карактер таба је "т", вертикални је "в". Ознака "в" ће пронаћи било који латински знак (слова, бројеви, подвлака) = [А-За-з0-9_].
Ознака "В" је еквивалентна [^ А-За-з0-9_]. То значи било који знак који није слово латиничне абецеде, број или знак "_".
Потражите знак "
Препоручено обликовање и кодирање регуларног израза
Сваки регуларни израз је важан за пажљиво тестирање на различитим варијантама жица.
Са искуством у стварању редовних израза грешакабиће мање, али ипак треба увек имати на уму да властито знање о правилима писања редовног израза можда не одговара стварности, посебно када се "редовни" преноси са једног језика на други.
Избор између класика (тачна индикација) ипоједностављена верзија регуларног израза, боље је преферирати прву. Заиста, у класици увек је јасно назначено шта се тражи и како. Ако постоје руска слова у регуларном изразу или у низу за претрагу, користе се сви стрингови и страница на којој се користи ЈаваСцрипт код који извршава регуларни израз, претвара се у униформно кодирање.
Код обраде карактера који не припадају латиници, има смисла размишљати о одређивању кодова карактера, а не самих карактера.
Када имплементирате ЈаваСцрипт алгоритме за претраживање, треба пажљиво проверити регуларни израз. Посебно је важно контролирати кодирање карактера.
Редовни израз заграде
Квадратне заграде дају опције за симбол,који мора бити или одсутан на одређеном мјесту, и округлим варијантама секвенци. Али ово је само опште правило. Нема изузетака од њега, али постоји много различитих опција за апликације.
вар цРегЕкп = "[а-з] *. (пнг | јпг | гиф)";
вар еРегЕкп = нови РегЕкп (цРегЕкп, "и");
вар цРегРес = "";
вар сТест = "пицтуре.јпг";
ако (еРегЕкп.тест (сТест)) {
цРегРес + = "- Да";
} елсе {
цРегРес + = "- Не";
}
Резултати:
Екпрессион / [аааз] *. (Пнг | јпг | гиф) / за линију "пицтуре.јпг" - Да
израз /^[а-д[[а-з[*..(пнг|јпг|гиф)/ за линију "пицтуре.јпг" - Не
израз /^[а-д[[а-з[*..(пнг|јпг|гиф)/ за линију "апицтуре.јпг" - Да
израз /^[а-д[[а-з[*..(пнг|јпг|гиф)/ за линију "апицтуре.јг" - Не
Треба напоменути да све, након чега постоји звездица, може бити присутно нула времена. То значи да "редовна сезона" може радити на неочекиваним начинима.
Проверите РегЕкп - тестирање е-поште
У ЈаваСцрипт-у, регуларни изрази добијају две методе, тест и екец, и могу се користити у стринг објектима (Стринг) у својим методама (функције): претражити, поделити, заменити и подударати.
Тестна метода је већ демонстрирана, омогућава вам да проверите исправност регуларног израза. Резултат методе: труе / фалсе.
Размотрите следеће јавасцрипт регуларне изразе. Провера е-поште из "тешке али извесне":
вар еРегЕкп = / ^ (([^ <> () [] \.,;: с @ "] + (. [^ <> () [] \.,;: с @"] +) *) | ( ". +")) @ (([[0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3}. [0-9] {1 , 3}]) | (([[а-зА-З-0-9] +.) + [А-зА-З] {2,})) $ /;
за ред вар сТест = "СлаваЦхип@сци.би" даје труе, односно овај ред је важећа адреса е-поште. Тест је изведен методом еРегЕкп.тест (сТест).
Практична употреба: обрада е-поште
Метода екец на излазу обезбеђује позив низ:
вар аРесулт = еРегЕкп.екец (сТест);
цРегРес = "<бр/>" + аРесулт.ленгтх + "<бр/>";
за (вар и = 0; и <аРесулт.ленгтх; и ++) {
цРегРес + = аРесулт [и] + "<бр/>";
}
даје следећи резултат:
9
Слава.Цхип@сци.би
Slava.Chip
Slava.Chip
.Цхип
ундефинед
sci.by
ундефинед
sci.by
сци.
Преостале методе функционишу слично. Препоручљиво је да их сами проверите. Пожељно је израдити и користити редовне изразе у пракси, копирање кодова није увек одговарајуће.
Популарни "регуларни"
Наведени ЈаваСцрипт регуларни израз заЕ-пошта није једина, постоји много једноставнијих опција. На пример, / ^ [в-.] + @ [В-] +. [А-з] [2,3] $ / и. Међутим, ова опција не узима у обзир све опције за снимање адресе е-поште.
Наравно, потребно је да видите искуство колега,анализирати методе које предлажу пре него што дизајнира свој властити редовни ЈаваСцрипт израз. Али постоје потешкоће. Не заборавите да у регуларним изразима ЈаваСцрипт-а (примери за копирање) могу дуплирати есенцијалне знаке: "", "/" или цитате. Ово ће довести до грешке коју можете дуго тражити.
Важно је узети у обзир уобичајени "људски аспект". На крају крајева, формалан јавни израз за телефон који може бити посетилац (особа) означен је на различите начине: 123-45-67, (29) 1234567, 80291234567 или +375291234567. И то је исти број. Опција писања неколико шаблона није увијек прихватљива, а ригорозна фиксација правила за писање броја може довести до непотребних неугодности или ограничења. Опција / ^ д [д () -] {4,14} д $ / и је погодна за већину случајева провере броја телефона.
Ако желите да јавасцрипт буде редованизраза, само провјера цифара, чак и тако једноставан случај захтева разјашњење. Она мора узети у обзир цео број или фракциону, експоненцијалну нотацију или редовну, позитивну или негативну. Такође можете узети у обзир присутност валутног симбола, број цифара након децималне тачке и подјелу целог броја броја у триаде.
Израз / ^ д + $ / и ће проверити само бројеве, а израз /^д+.д+$/и вам омогућава да користите период да наведете фракциони део броја.
У ЈаваСцрипту, провера регуларног израза можекористе се за строго означавање формата унесених података, што је важно, посебно приликом уношења упитника, пасоша, правних адреса итд.
Провера датума - само компликовано
Размислите о другим регуларним изразима ЈаваСцрипта. Примери датума, као број или број телефона су избор између ригидности и флексибилности. Датум догађаја је један од основних података које често треба унети. Али поправљање улаза у одређеном формату: "дд-мм-ииии" или "дм.иии" често доводи до незадовољства купца. Прелазак из поља за унос текста у мјесец, попуњен класичним ХТМЛ обликом, можда неће доћи када унесете само једну цифру, а унос друге може изазвати потешкоће. На пример, 3 је већ унето у поље дана, а следећи број 2 не замењује први, а 32 јој се додељује, што наравно узрокује неугодности.
Ефикасност и погодност редовних изразазначајно зависе од укупне конструкције дијалога са посетиоцем. У једном случају, за одређивање датума, препоручљиво је користити једно поље за унос форми, у другом случају, морате дати различита поља за дан, месец и годину. Али онда ће бити додатних "трошкова кодирања" за проверу преступне године, броја месеци, броја дана у њима.
Реплаце Лоокуп, Регулар Екпрессион Мемори
ЈаваСцрипт замени (регуларни изрази)користите метод објекта Стринг и дозволите вам да пронађете вредност и одмах га промените. Ово је погодно за исправљање улазних грешака, уређивање садржаја поља форми и претварање података из једног презентационог формата на други.
вар цРегЕкп = / ([а-и] +) с ([а-и] +) с ([а-и] +) / и; // претрага ствара три "променљиве"
вар сТест = "овај чланак је добар!";
вар цРегРес = сТест.реплаце (цРегЕкп, "$ 2, $ 3, $ 1");
вар дТестЛине = доцумент.гетЕлементБиИд ("сцТестЛине");
дТестЛине.иннерХТМЛ = "Израз" + цРегЕкп + "за линију" "+ сТест +" "ће бити:" + цРегРес;
Резултат:
израз / ([а-и] +) с ([а-и] +) с ([а-и] +) / и за линију "овај чланак је добар!" испоставило се: чланак, добро, ово!
Када се изврши, сваки пар заграда памти резултат у "променљивој" $ н, где је н број пар заграда ($ 1, $ 2, ...). За разлику од опште прихваћених, овде је бројање варијабли од 1, а не од 0.
Опште препоруке
Редовни израз поједностављује код, али време јењегов развој је често важан. Можете почети да радите са једноставним конструкцијама, а онда комбинујете направљене у сложеније изразе. Можете користити различите онлине услуге да бисте тестирали регуларне изразе или посебне локалне алате.
Најбоља опција је стварање властитебиблиотеке регуларног израза и власнички алат за тестирање нових догађаја. Ово је најбољи начин да консолидујете искуство и научите како брзо креирати поуздане и практичне дизајне.
Коришћењем понављања знакова и низова, нпр.посебни знакови "*", "+" и коврџаста загради који указују на број понављања треба да буду вођени принципима једноставности и експедитивности. Важно је схватити да регуларни израз од момента почетка рада и до добијања резултата је у потпуности на милости искоришћеног мотора. Нису сви језици ЈаваСцрипт еквивалентни. Сваки претраживач може додати своје личне преференције у тумачење регуларних израза.
Компатибилност није ограничена на странице и таблице.Стилесхеетс, регуларни изрази су такодје релевантни. Страницу која користи ЈаваСцрипт може се сматрати дебугираном само ако успјешно ради на различитим прегледачима.
ЈаваСцрипт, Стринг и РегЕкп
Правилно радите на нивоу клијента, тјпосетилац прегледача у јавасцрипт-у захтева високо квалификованог програмера Пре много времена, постало је могуће дебагати ЈаваСцрипт код помоћу алатки прегледача или уз помоћ проширења трећих страна, уредника кода и независних програма.
Међутим, у свим случајевима не може отклонити грешкууправљају и пружају програмеру добру подршку, брзо откривање грешака, откривање уских грла. Време када је рачунар био фокусиран на рачунарство, у далекој прошлости. Сада се посебна пажња поклања информацији, а објекти низа су постали суштински. Бројеви су постали низови и они своју истинску суштину испољавају само у право време и на правом месту.
Редовни изрази ојачавају способности стрингова, али захтевају правилно поштовање за себе. Дебуггинг РегЕкп у току свог рада, чак и ако је могуће моделирати, није врло интересантна идеја.
Разумевање структуре и логике РегЕкп објекта, значење објекта Стринг, синтакса и семантика ЈаваСцрипта је сигурна гаранција сигурног и поузданог кода, стабилног рада сваке странице и сајта у цјелини.