Expresii regulate în JavaScript. Obiect RegExp

Clasa RegExp din JavaScript este o expresie regulată - un obiect care descrie un model de caractere. Obiectele RegExp sunt de obicei create folosind sintaxa literală specială de mai jos, dar pot fi create și folosind constructorul RegExp ().

Sintaxă

// folosind sintaxa literală specială var regex = / pattern / flags; // folosind constructorul var regex = new RegExp ("model", "steaguri"); var regex = new RegExp (/ pattern /, "flags");

Valorile parametrilor:

Steaguri de expresie regulată

SteagDescriere
gVă permite să găsiți toate meciurile, mai degrabă decât să vă opriți după primul meci ( steagul de meci global).
euPermite potrivirea fără majuscule și minuscule ( ignorați steagul cazului).
mPotrivirea se face pe mai multe linii. Caracterele de început și de sfârșit (^ și $) sunt procesate pe mai multe linii, adică potrivirea are loc la începutul sau la sfârșitul fiecărei linii (delimitatori \ n sau \ r) și nu doar la începutul sau la sfârșitul întregii linii ( steag multiliniu).
tuModelul va fi interpretat ca o succesiune de puncte de cod Unicode ( steag unicode).
yPotrivirea are loc prin indexul indicat de proprietatea lastIndex a acestei expresii regulate, în timp ce potrivirea nu se efectuează la un index mai târziu sau anterior ( steag lipicios).

Seturi de caractere

Metacaractere

SimbolDescriere
. Găsește un alt personaj decât un personaj linie nouă sau un caracter de sfârșit de linie (\ n, \ r, \ u2028 sau \ u2029).
\ dGăsește caracterul unei cifre din alfabetul latin de bază. Echivalent cu utilizarea unui set de caractere.
\ DGăsește orice caracter care nu este o cifră din alfabetul latin de bază. Echivalent cu setul de caractere [^ 0-9].
\ sGăsește un singur caracter alb. Spațiul alb se referă la spațiu, filă, flux de pagini, linie și alte caractere spațiale Unicode. Echivalent cu setul de caractere [\ f \ n \ r \ t \ v \ u00a0 \ u1680 \ u180e \ u2000 \ u2001 \ u2002 \ u2003 \ u2004 \ u2005 \ u2006 \ u2007 \ u2008 \ u2009 \ u200a \ u2028 \ u2029 \ u202f \ u205f \ u3000].
\ SGăsește un singur caracter care nu este spațiu alb. Spațiul alb se referă la spațiu, filă, flux de pagini, flux de linie și alte caractere spațiale Unicode. Echivalent cu setul de caractere [^ \ f \ n \ r \ t \ v \ u00a0 \ u1680 \ u180e \ u2000 \ u2001 \ u2002 \ u2003 \ u2004 \ u2005 \ u2006 \ u2007 \ u2008 \ u2009 \ u200a \ U2028 \ u2029 \ u202f \ u205f \ u3000].
[\ b]Găsește caracterul backspace (caracter special \ b, U + 0008).
\0 Găsește caracterul 0 (zero).
\ nGăsește caracterul newline.
\ fGăsește caracterul fluxului de pagini.
\ rGăsește un caracter de returnare a trăsurii.
\ tGăsește un caracter de filă orizontală.
\ vGăsește un caracter de filă verticală.
\ wGăsește orice caracter alfanumeric din alfabetul latin de bază, inclusiv subliniul. Echivalent cu un set de caractere.
\ WGăsește orice caracter care nu este un alfabet latin de bază. Echivalent cu setul de caractere [^ a-Za-z0-9_].
\ cXGăsește un caracter de control într-un șir. Unde X este o literă de la A la Z. De exemplu, / \ cM / reprezintă Ctrl-M.
\ xhhGăsește un caracter folosind o valoare hexazecimală (hh este o valoare hexazecimală din două cifre).
\ uhhhhGăsește un caracter folosind codificarea UTF-16 (hhhh este o valoare hexazecimală din patru cifre).
\ u (hhhh) sau
\ u (hhhhh)
Găsește un caracter cu o valoare Unicode U + hhhh sau U + hhhhh (valoare hexazecimală). Numai când este dat steagul u.
\ Indică faptul că următorul personaj este special și nu trebuie interpretat literal. Pentru personajele care sunt tratate de obicei într-un mod special, indică faptul că următorul personaj nu este special și ar trebui interpretat literal.

Restricții

Cuantificatoare

SimbolDescriere
n *Potrivirea are loc pe orice șir care conține zero sau mai multe apariții ale unui caracter n.
n +Potrivirea are loc cu orice șir care conține cel puțin un caracter n.
n?Potrivirea are loc pe orice linie care precede elementul n zero sau o dată.
n (x)Se potrivește cu orice șir care conține o succesiune de caractere n de un anumit număr de ori X. X
n (x,) X apariții ale elementului precedent n. X trebuie să fie un număr întreg pozitiv.
n (x, y)Se potrivește cu orice linie care conține cel puțin X, dar nu mai mult decât cu y apariții ale elementului precedent n. Xși y trebuie să fie numere întregi pozitive.
n *?
n +?
n ??
n (x)?
n (x,)?
n (x, y)?
Potrivirea are loc prin analogie cu cuantificatorii *, + ,? și (...), totuși, căutarea se efectuează cu cea mai mică potrivire posibilă. Implicit este modul lacom ,? la sfârșitul cuantificatorului vă permite să specificați un mod „non-lacom” în care potrivirea se repetă de cât mai puține ori.
x (? = y)Vă permite să vă potriviți X, doar dacă pentru X ar trebui să y.
X y)Vă permite să vă potriviți X, doar dacă pentru X nu urmează y.
x | yPotrivirea are loc cu oricare dintre alternativele specificate.

Gruparea și backlink-urile

SimbolDescriere
(X)Găsește un simbol Xși amintiți-vă rezultatul meciului („captarea parantezelor”). Șirul potrivit poate fi apelat din elementele matricei rezultate ..., [n], sau din proprietățile obiectului predefinit RegExp $ 1 ..., $ 9.
(?: X)Găsește un simbol X, dar nu vă amintiți rezultatul meciului („paranteze care nu captează”). Șirul potrivit nu poate fi apelat din elementele matricei rezultate ..., [n], sau din proprietățile obiectului RegExp predefinit $ 1 ..., $ 9.
\ nO referință din spate la ultimul șir care se potrivește cu al șaselea șir din paranteze în expresia regulată (parantezele sunt numerotate de la stânga la dreapta). n trebuie să fie un număr întreg pozitiv.

Acest articol a acoperit elementele de bază ale utilizării expresiei regulate în Javascript.

Introducere

Ce este o expresie regulată?

O regex JS este o secvență de caractere care formează o regulă de căutare. Această regulă poate fi apoi utilizată pentru a căuta textul și pentru a-l înlocui. În practică, o expresie regulată poate consta chiar dintr-un singur caracter, dar tiparele de căutare mai complexe sunt mai frecvente.

În Javascript, expresiile regulate sunt, de asemenea, obiecte. Acestea sunt modele utilizate pentru a potrivi secvențe de caractere în șiruri. Acestea sunt utilizate în metodele exec () și test () ale obiectului RegExp, precum și în metodele match (), replace (), căutare și split () ale obiectului String.

Exemplu

var pattern = / exemplu / i

/ example / i este o expresie regulată. exemplu este un șablon ( care va fi folosit în căutare). i este un modificator care indică sensibilitatea la majuscule.

Pregătirea unei expresii regulate

Expresiile regulate JS constau dintr-un model și un modificator. Sintaxa va fi ceva de genul acesta:

/ model / modificatori;

Șablonul definește regula de căutare. Se compune din caractere simple precum / abc / sau o combinație de simplu și personaje speciale: / abc / sau / Chapter (d +). d /.

Tabel de șabloane

Modificatorii permit interogărilor să fie sensibile la majuscule, la nivel global și așa mai departe. Acestea sunt utilizate pentru efectuarea de căutări sensibile la majuscule și minuscule, precum și căutări globale.

Tabel modificator

Acum suntem gata să aplicăm expresii regulate JS. Există două modalități principale de a face acest lucru: folosind un obiect regex sau un regex pentru șir.

Folosind un obiect regex

Creați un obiect de expresie regulată

Acest obiect descrie un model de caractere. Este folosit pentru potrivirea modelelor. Există două moduri de a construi un obiect de expresie regulat.

Metoda 1: folosind un literal regex care constă dintr-un model închis în bare oblice, de exemplu:

var reg = / ab + c /;

Literalele expresiei regulate declanșează precompilarea expresiei regulate atunci când scriptul este analizat. Dacă expresia regulată este persistentă, utilizați-o pentru a îmbunătăți performanța.

Metoda 2: apelând funcția de constructor a obiectului RegExp, de exemplu:

var reg = new RegExp ("ab + c");

Utilizarea constructorului vă permite să compilați expresia regulată JS în timpul rulării. Utilizați această metodă dacă expresia regulată se va schimba sau dacă nu cunoașteți modelul în avans. De exemplu, dacă primiți informații de la un utilizator care introduce un termen de căutare.

Metode obiecte de expresie regulată

Să aruncăm o privire la câteva metode comune ale obiectului de expresie regulată:

  • compila () ( depreciat în versiunea 1.5) - compilează o expresie regulată;
  • exec () - Efectuează potrivirea pe un șir. Returnează primul meci;
  • test () - Efectuează potrivirea pe un șir. Returnează adevărat sau fals;
  • toString () - Returnează valoarea șirului expresiei regulate.

Exemple de

Folosind test ()

Metoda test () este o expresie regulată a unui obiect RegExp. Se caută un șir de model și, în funcție de rezultatul pe care îl returnează, se întoarce adevărat sau fals. Următorul exemplu de expresie regulată JS arată cum să căutați într-un șir caracterul „ e”:

var patt = / e /; patt.test („Cele mai bune lucruri din lume sunt gratuite!”);

Deoarece aici linia conține „ e”, Rezultatul acestui cod va fi adevărat.

Nu trebuie să puneți deloc expresii regulate într-o variabilă. Aceeași interogare poate fi făcută într-un singur rând:

/e/.test("Cele mai bune lucruri ale lumii sunt gratuite! ");

Folosind exec ()

Se caută în șir pentru regula de căutare specificată și returnează textul găsit. Dacă nu a fost găsită nicio potrivire, atunci rezultatul este nul.

Să vedem metoda în acțiune, folosind exemplul aceluiași simbol „ e”:

/e/.exec("Cele mai bune lucruri ale lumii sunt gratuite! ");

Deoarece linia conține „ e”, Rezultatul acestui cod va fi .e.

Aplicarea unei expresii regulate la un șir

În Javascript, aceste expresii pot fi folosite și cu două metode ale obiectului String: search () și replace (). Acestea sunt necesare pentru a efectua căutarea și înlocuirea în text.

  • Metoda search () - folosește o expresie pentru a găsi o potrivire și returnează informații despre locația potrivirii;
  • Metoda Replace () - returnează un șir modificat cu un șablon înlocuit.

Exemple de

Aplicarea expresiei regulate JS pentru a efectua o căutare sensibilă la majuscule și minuscule pentru expresia „ w3schools" în linie:

var str = "Vizitați W3Schools"; var n = str.search (/ w3schools / i);

Rezultatul în n este 6.

Metoda de căutare acceptă și un șir ca argument. Argumentul șir va fi convertit într-o expresie regulată:

Folosind șir pentru a găsi expresia „ W3schools" în linie.

Expresii obisnuite

Expresie uzuala este un obiect care descrie un model de caractere. Clasa RegExp din JavaScript reprezintă expresii regulate, iar obiectele de clasă String și RegExp definesc metode care utilizează expresii regulate pentru a efectua potriviri de tipare și operații de căutare pe text cu înlocuire. Gramatica expresiei regulate din JavaScript conține un subset destul de complet al sintaxei expresiei regulate folosită în limba Perl 5, deci dacă aveți experiență în limba Perl, puteți descrie cu ușurință tiparele din programele JavaScript.

Caracteristicile expresiilor regulate Perl care nu sunt acceptate în ECMAScript includ semnalizatoarele s (modul cu o singură linie) și x (sintaxă extinsă); secvențe de scăpare \ a, \ e, \ l, \ u, \ L, \ U, \ E, \ Q, \ A, \ Z, \ z și \ G și alte construcții extinse începând cu (?.

Definirea expresiilor regulate

În JavaScript, expresiile regulate sunt reprezentate de obiecte RegExp... Obiectele RegExp pot fi create folosind constructorul RegExp (), dar mai des sunt create folosind o sintaxă literală specială. La fel cum literele șirului sunt specificate ca caractere citate, literele expresiei regulate sunt specificate ca caractere încadrate într-o pereche slash (/). Astfel, codul JavaScript poate conține șiruri de genul acesta:

Var pattern = / s $ /;

Această linie creează un nou obiect RegExp și îl atribuie variabilei model. Acest obiect RegExp caută orice șiruri care se termină cu caracterul „s”. Aceeași expresie regulată poate fi definită folosind constructorul RegExp ():

Var pattern = RegExp nou („s $”);

O specificație a modelului regex constă dintr-o secvență de caractere. Majoritatea personajelor, inclusiv toate caracterele alfanumerice, descriu literalmente caracterele care trebuie să fie prezente. Adică expresia regulată / java / se potrivește cu toate șirurile care conțin șirul „java”.

Celelalte caractere din expresiile regulate nu sunt destinate a fi utilizate pentru a-și găsi echivalentele exacte, ci mai degrabă au semnificații speciale. De exemplu, expresia regulată / s $ / conține două caractere. Primul s indică o căutare a unui caracter literal. În al doilea rând, $ este un metacaracter special care denotă sfârșitul unei linii. Deci, această regex se va potrivi cu orice șir care se termină cu s.

Următoarele secțiuni descriu diferitele caractere și metacaractere utilizate în expresiile regulate din JavaScript.

Personaje literale

După cum sa menționat anterior, toate caracterele alfabetice și numerele din expresiile regulate se potrivesc. Sintaxa expresiei obișnuite din JavaScript acceptă, de asemenea, capacitatea de a specifica unele caractere nealfabetice utilizând secvențe de evacuare care încep cu un caracter invers (\). De exemplu, \ n se potrivește cu un caracter de linie. Aceste simboluri sunt listate în tabelul de mai jos:

Unele semne de punctuație au semnificații speciale în expresiile regulate:

^ $ . * + ? = ! : | \ / () { } -

Semnificația acestor simboluri este explicată în secțiunile următoare. Unele dintre ele au o semnificație specială numai în anumite contexte regex, în timp ce în alte contexte sunt luate la propriu. De obicei, totuși, pentru a include oricare dintre aceste caractere literalmente într-o expresie obișnuită, trebuie să o preparați cu o bară inversă. Alte personaje, precum ghilimele și @, nu au o semnificație specială și se potrivesc pur și simplu în expresii regulate.

Dacă nu vă amintiți exact ce caracter ar trebui să fie precedat de un \, puteți pune în siguranță o bară inversă în fața oricăruia dintre personaje. Cu toate acestea, rețineți că multe litere și cifre au o semnificație specială atunci când sunt combinate cu o bară, astfel încât literele și numerele pe care le căutați literalmente nu trebuie să fie precedate de un \. Pentru a include caracterul de bară inversă în regexp, trebuie să puneți în mod evident un alt caracter de bară inversă. De exemplu, următoarea expresie regulată se potrivește cu orice șir care conține un caracter invers: / \\ /.

Clase de personaje

Caracterele literale individuale pot fi combinate în clase de caractere prin încadrarea lor între paranteze drepte. O clasă de caractere se potrivește cu orice caracter din această clasă. Prin urmare, expresia regulată // se potrivește cu unul dintre caracterele a, b sau c.

Clasele de caractere negate pot fi, de asemenea, definite pentru a se potrivi cu orice alt caracter decât cele indicate între paranteze. O clasă de caractere negată este specificată de caracterul ^ ca primul caracter care urmează paranteze stânga. Expresia regulată / [^ abc] / se potrivește cu orice caracter altul decât a, b sau c. În clasele de caractere, o gamă de caractere poate fi specificată folosind o cratimă. Căutați toate caracterele alfabetului latin în minuscule se efectuează folosind expresia //, iar orice literă sau număr din setul de caractere latine poate fi găsit folosind expresia //.

Anumite clase de caractere sunt folosite în mod frecvent, astfel încât sintaxa expresiei regulate în JavaScript include caractere speciale și secvențe de evadare pentru a le indica. De exemplu, \ s se potrivește cu spațiul alb, cu filele și cu orice caractere spațiale Unicode și \ S se potrivește cu toate caracterele spațiu alb non-Unicode.

Tabelul de mai jos prezintă aceste caractere speciale și sintaxa claselor de caractere. (Rețineți că unele dintre secvențele de evadare ale clasei de caractere se potrivesc numai cu caractere ASCII și nu sunt extinse pentru a funcționa cu caractere Unicode. Puteți defini în mod explicit clase proprii Caracterele Unicode, de exemplu, expresia / [\ u0400- \ u04FF] / se potrivește cu orice caracter chirilic.)

Clasele de caractere regex JavaScript
Simbol Corespondenţă
[...] Oricare dintre personajele dintre paranteze
[^...] Orice personaj care nu este între paranteze
. Orice caracter, altul decât o linie nouă sau un alt delimitator de șiruri Unicode
\ w Orice caracter text ASCII. Echivalentă cu
\ W Orice caracter care nu este un caracter text ASCII. Echivalent cu [^ a-zA-Z0-9_]
\ s Orice caracter spațiu Unicode
\ S Orice caracter non-spațiu din setul Unicode. Rețineți că \ w și \ S nu sunt la fel
\ d Orice cifre ASCII. Echivalentă cu
\ D Orice caracter, altele decât cifrele ASCII. Echivalent cu [^ 0-9]
[\ b] Literal caracter retroactiv

Rețineți că secvențele de evadare a caracterelor speciale de clasă pot fi încadrate între paranteze drepte. \ s se potrivește cu orice caracter al spațiului alb și \ d se potrivește cu orice cifră, prin urmare / [\ s \ d] / se potrivește cu orice caracter sau cifră din spațiul alb.

Repetiţie

Cunoscând sintaxa expresiilor regulate obținute până acum, putem descrie un număr din două cifre ca / ​​\ d \ d / sau din patru cifre ca / ​​\ d \ d \ d \ d /, dar nu putem, de exemplu , descrie un număr, orice număr de cifre sau un șir de trei litere urmat de o cifră opțională. Aceste modele mai complexe utilizează sintaxa expresiei regulate pentru a indica de câte ori poate fi repetat un anumit element de expresie regulată.

Simbolurile de repetare urmează întotdeauna modelul la care se aplică. Unele tipuri de repetare sunt utilizate destul de des și există simboluri speciale pentru a indica aceste cazuri. De exemplu, + se potrivește cu una sau mai multe instanțe din modelul anterior. Următorul tabel oferă un rezumat al sintaxei repetării:

Următoarele rânduri prezintă câteva exemple:

Var pattern = / \ d (2,4) /; // Potrivește un model numeric de două până la patru cifre = / \ w (3) \ d? /; // Potrivește exact trei caractere de cuvânt și un model de cifră opțional = / \ s + java \ s + /; // Potrivește cuvântul „java” cu unul sau mai multe spații // înainte și după acesta model = / [^ (] * /; // Potrivește zero sau mai multe caractere, altele decât parantezele de deschidere

Aveți grijă când utilizați caracterele de repetare * și?. Ele pot corespunde absenței modelului specificat în fața lor și, prin urmare, absenței simbolurilor. De exemplu, expresia regulată / a * / se potrivește cu șirul „bbbb” deoarece nu conține caracterul a.

Caracterele de repetare enumerate în tabel corespund numărului maxim de repetări care poate fi utilizat pentru a căuta părți ulterioare ale expresiei regulate. Spunem că aceasta este o repetare „lacomă”. De asemenea, este posibil să implementați repetarea într-o manieră non-lacomă. Este suficient să indicați după simbolul (sau simbolurile) repetării un semn de întrebare: ??, +?, *? sau chiar (1,5)?

De exemplu, expresia regulată / a + / se potrivește cu una sau mai multe instanțe ale literei a. Aplicat șirului „aaa”, se potrivește cu toate cele trei litere. Pe de altă parte, expresia / a +? / Se potrivește cu una sau mai multe instanțe ale literei a și selectează cel mai mic număr posibil de caractere. Aplicat aceleiași linii, acest model se potrivește doar cu prima literă a.

O repetare „nesigură” nu dă întotdeauna rezultatul scontat. Luați în considerare modelul / a + b /, care se potrivește cu unul sau mai multe a urmat de a b. Când este aplicat șirului „aaab”, acesta se potrivește cu întregul șir.

Acum să verificăm versiunea „non-lacomă” a / a +? B /. S-ar crede că ar trebui să se potrivească cu caracterul b, precedat de un singur caracter a. Dacă se aplică aceluiași șir, se așteaptă ca „aaab” să se potrivească cu singurul a și cu ultimul b. Cu toate acestea, în realitate întregul șir se potrivește cu acest tipar, ca în cazul versiunii „lacome”. Ideea este că o căutare regulată a modelului de expresie se realizează prin găsirea primei poziții din șir din care devine posibilă o potrivire. Deoarece o potrivire este posibilă de la primul caracter al șirului, meciurile mai scurte care încep cu caracterele ulterioare nici măcar nu sunt luate în considerare.

Alternative, grupare și linkuri

Gramatica expresiei regulate include caractere speciale pentru definirea alternativelor, gruparea subexpresiilor și referințe la subexpresiile anterioare. Simbolul țevii | servește la separarea alternativelor. De exemplu, / ab | cd | ef / se potrivește fie cu șirul „ab”, fie cu șirul „cd” sau cu șirul „ef”, iar modelul / \ d (3) | (4) / se potrivește cu trei cifre sau patru litere mici ...

Rețineți că alternativele sunt procesate de la stânga la dreapta până când se găsește o potrivire. Dacă se găsește o potrivire cu alternativa din stânga, cea dreaptă este ignorată, chiar dacă se poate obține o potrivire „mai bună”. Prin urmare, atunci când modelul / a | ab / este aplicat șirului „ab”, acesta se va potrivi doar cu primul caracter.

Parantezele au mai multe semnificații în expresiile regulate. Una dintre ele este gruparea elemente individualeîntr-o singură subexpresie, astfel încât elementele atunci când se utilizează caracterele speciale |, *, + ,? iar altele sunt tratate ca un întreg. De exemplu, / java (script)? / Se potrivește cu cuvântul „java” urmat de cuvântul opțional „script” și / (ab | cd) + | ef) / se potrivește fie cu șirul „ef”, fie cu una sau mai multe repetări ale la fel din șirurile „ab” sau „cd”.

O altă utilizare a parantezelor în expresiile regulate este de a defini sub-modelele dintr-un model. Când se găsește o potrivire de expresie regulată în șirul țintă, puteți extrage porțiunea șirului țintă care se potrivește cu orice sub-model parantizat specific.

Să presupunem că doriți să căutați una sau mai multe litere mici, urmate de unul sau mai multe numere. Pentru a face acest lucru, puteți utiliza modelul / + \ d + /. Dar să presupunem că vrem doar numerele la sfârșitul fiecărui meci. Dacă puneți această parte a modelului între paranteze (/ + (\ d +) /), atunci puteți extrage numere din orice potriviri pe care le găsim. Modul în care se face acest lucru va fi descris mai jos.

În legătură cu aceasta este o altă utilizare a subexpresiilor parantezate, permițându-vă să consultați subexpresiile din partea anterioară a aceleiași expresii regulate. Acest lucru se realizează prin specificarea uneia sau mai multor cifre după caracterul \. Numerele se referă la poziția subexpresiei parantezate în cadrul expresiei regulate. De exemplu, \ 1 se referă la prima subexpresie, iar \ 3 se referă la a treia. Rețineți că subexpresiile pot fi imbricate unul în celălalt, astfel încât poziția paranteză stângă este utilizată în numărare. De exemplu, în următoarea expresie regulată, o referință subexpresie imbricată (cript) ar arăta ca \ 2:

/ (ava (cript)?) \ sis \ s (fun \ w *) /

O referință la o subexpresie anterioară nu indică modelul acelei subexpresii, ci textul găsit care se potrivește cu acel model. Prin urmare, legăturile pot fi folosite pentru a impune o constrângere care selectează porțiuni dintr-un șir care conțin exact aceleași caractere. De exemplu, următoarea regex se potrivește cu zero sau mai multe caractere dintr-un singur sau ghilimele duble... Cu toate acestea, nu este necesar ca ghilimelele de deschidere și de închidere să se potrivească (de exemplu, ambele ghilimele sunt simple sau duble):

/[""][^""]*[""]/

Putem solicita ghilimele să se potrivească prin intermediul unui astfel de link:

Aici, \ 1 se potrivește cu prima subexpresie. În acest exemplu, legătura impune constrângerea conform căreia ghilimele de închidere se potrivesc cu ghilimele de deschidere. Această regex nu permite ghilimelele unice în ghilimele duble și invers.

De asemenea, este posibil să grupați elemente într-o expresie regulată fără a crea o referință numerotată la acele elemente. În loc să grupați pur și simplu elemente între (și), începeți grupul cu (?: Și terminați-l cu). Luați în considerare, de exemplu, următorul model:

/ (ava (?: cript)?) \ sis \ s (fun \ w *) /

Aici subexpresia (?: Cript) este necesară doar pentru grupare, astfel încât caracterul de repetare să poată fi aplicat grupului. Aceste paranteze modificate nu creează o legătură, deci în această regex, \ 2 se referă la textul care se potrivește cu modelul (fun \ w *).

Următorul tabel listează alternativele, gruparea și operatorii de referință în expresii regulate:

Selecție JavaScript, grupare și caractere regex de referință
Simbol Sens
| Alternativă. Se potrivește fie cu subexpresia din stânga, fie cu subexpresia din dreapta.
(...) Gruparea. Grupează elementele într-o singură unitate care poate fi utilizată cu caracterele *, +,?, | etc. De asemenea, își amintește simbolurile corespunzătoare acestui grup pentru a fi utilizate în linkurile ulterioare.
(?:...) Numai grupare. Grupează elementele într-un singur întreg, dar nu își amintește simbolurile corespunzătoare acestui grup.
\ număr Se potrivește cu aceleași caractere care au fost găsite la potrivirea grupului cu numărul de număr. Grupurile sunt subexpresii între paranteze (posibil imbricate). Numerele grupurilor sunt atribuite prin numărarea parantezelor din stânga de la stânga la dreapta. Grupuri formate cu simboluri (?: Nu sunt numerotate.

Specificarea poziției meciului

După cum s-a descris mai sus, multe elemente ale unei expresii regulate se potrivesc cu un caracter pe șir. De exemplu, \ s se potrivește cu un caracter de spațiu alb. Alte elemente de expresie regulată se potrivesc cu pozițiile dintre caractere, nu cu personajele în sine. De exemplu, \ b se potrivește cu o limită de cuvânt - limita dintre \ w (caracter text ASCII) și \ W (caracter non-text), sau limita dintre un caracter text ASCII și începutul sau sfârșitul unei linii.

Elemente precum \ b nu definesc caractere care trebuie să fie prezente în șirul găsit, dar definesc poziții valide pentru potrivire. Aceste elemente sunt uneori numite elemente de ancorare regex, deoarece ancorează modelul într-o poziție specifică din șir. Cele mai frecvente elemente de ancorare utilizate sunt ^ și $, care ancorează modele la începutul și respectiv la sfârșitul unei linii.

De exemplu, cuvântul „JavaScript” pe propria linie poate fi găsit folosind expresia regulată / ^ JavaScript $ /. Pentru a găsi un singur cuvânt „Java” (și nu un prefix, de exemplu, în cuvântul „JavaScript”), puteți încerca să utilizați modelul / \ sJava \ s /, care necesită un spațiu înainte și după cuvânt.

Dar această soluție ridică două probleme. În primul rând, va găsi cuvântul „Java” numai dacă este înconjurat de spații de ambele părți și nu îl poate găsi la începutul sau la sfârșitul liniei. În al doilea rând, atunci când acest model se potrivește, șirul returnat de acesta va conține spații de conducere și de spate, ceea ce nu este exact ceea ce ne dorim. Deci, în loc de un model care se potrivește cu spațiul alb, vom folosi un model (sau ancoră) care se potrivește cu limitele cuvântului \ b. Va apărea următoarea expresie: / \ bJava \ b /.

Elementul de ancorare \ B se potrivește cu o poziție care nu este o limită de cuvânt. Adică, modelul / \ Bcript / se va potrivi cu cuvintele „JavaScript” și „postscript” și nu se va potrivi cu cuvintele „script” sau „Scripting”.

Expresiile regulate arbitrare pot fi folosite și ca condiții de ancorare. Punerea unei expresii între caractere (? = Și) o transformă într-o potrivire privitoare la caracterele ulterioare, necesitând ca aceste caractere să se potrivească cu modelul specificat, dar să nu fie incluse în șirul de potrivire.

De exemplu, pentru a se potrivi cu numele unui limbaj de programare comun urmat de două puncte, puteți utiliza expresia / ava (cript)? (? = \ :) /. Acest model se potrivește cu cuvântul „JavaScript” din șirul „JavaScript: Ghidul definitiv”, dar nu se va potrivi cu cuvântul „Java” din șirul „Java într-o coajă de nucă”, deoarece nu este urmat de două puncte.

Dacă introduceți condiția (?!, Atunci va fi un aspect negativ pentru caracterele ulterioare, care necesită ca următoarele caractere să nu se potrivească cu modelul specificat. De exemplu, modelul / Java (?! Script) (\ w *) / se potrivește cu șirul „Java”, urmat de majusculăși orice număr de caractere text ASCII, cu condiția ca șirul „Java” să nu fie urmat de șirul „Script”. Se va potrivi cu șirul „JavaBeans”, dar nu cu șirul „Javanese”, se va potrivi cu șirul „JavaScrip”, dar nu cu șirurile „JavaScript” sau „JavaScripter”.

Tabelul de mai jos prezintă caracterele ancorei expresiei regulate:

Caractere ancorate de expresie regulată
Simbol Sens
^ Potrivește începutul unei expresii de șir sau începutul unui șir într-o căutare pe mai multe linii.
$ Potrivește sfârșitul unei expresii de șir sau sfârșitul unui șir într-o căutare pe mai multe linii.
\ b Corespunde la o limită de cuvânt, adică se potrivește poziției dintre \ w și \ W sau între \ w și începutul sau sfârșitul unui șir. (Rețineți, totuși, că [\ b] se potrivește cu caracterul backspace.)
\ B Se potrivește cu o poziție care nu este o limită de cuvânt.
(? = p) O verificare pozitivă a lookahead pentru personajele ulterioare. Necesită caractere ulterioare pentru a se potrivi cu p, dar nu include acele caractere în șirul găsit.
(?! p) Verificare negativă a lookahead pentru caracterele ulterioare. Necesită ca următoarele caractere să nu se potrivească cu p.

Steaguri

Și încă un element final al gramaticii expresiei regulate. Steagurile de expresie regulată specifică reguli de potrivire a modelelor la nivel înalt. Spre deosebire de restul gramaticii expresiei regulate, steagurile sunt specificate nu între caractere oblice, ci după a doua. Există trei semnalizări acceptate în JavaScript.

Steagul i specifică faptul că potrivirea tiparului nu trebuie să facă distincția între majuscule și minuscule și steag g- căutarea ar trebui să fie globală, adică trebuie să fie găsite toate potrivirile din șir. Steag m caută un model în modul multiliniu. Dacă expresia șirului căutat conține caractere de alimentare de linie, atunci în acest mod, caracterele de ancorare ^ și $, pe lângă potrivirea cu începutul și sfârșitul întregii expresii de șir, se potrivesc și cu începutul și sfârșitul fiecărui șir de text. De exemplu, / java $ / im se potrivește atât cu "java", cât și cu "Java \ nis fun".

Aceste steaguri pot fi combinate în orice combinație. De exemplu, pentru a căuta prima apariție a cuvântului „java” (sau „Java”, „JAVA” etc.) într-un mod insensibil la majuscule, puteți utiliza expresia regulată insensibilă la majuscule / \ bjava \ b / i. Și pentru a găsi toate aparițiile acestui cuvânt într-un șir, puteți adăuga steagul g: / \ bjava \ b / gi.

Metode de clasă șir pentru potrivirea modelelor

Până în acest moment, am discutat despre gramatica regexpului generat, dar nu ne-am uitat la modul în care regexp-ul poate fi de fapt folosit în JavaScript. În această secțiune, vom discuta despre metodele obiectului String care utilizează expresii regulate pentru potrivirea modelelor și căutarea și înlocuirea. Apoi, vom continua discuția noastră de potrivire a modelelor cu expresii regulate, examinând obiectul RegExp și metodele și proprietățile sale.

Șirurile acceptă patru metode folosind expresii regulate. Cea mai simplă dintre acestea este metoda căutare ()... Ia o expresie regulată ca argument și returnează fie poziția primului caracter al șirului de caractere găsit, fie -1 dacă nu a fost găsită nicio potrivire. De exemplu, următorul apel va returna 4:

Var result = "JavaScript" .search (/ script / i); // 4

Dacă argumentul metodei search () nu este o expresie regulată, acesta este mai întâi convertit trecându-l la constructorul RegExp. Metoda search () nu acceptă căutările globale și ignoră semnalul g din argumentul său.

Metodă a inlocui () efectuează o operațiune de căutare și înlocuire. Acesta ia o expresie regulată ca prim argument și un șir de înlocuire ca al doilea. Metoda caută linia pentru care este apelată pentru a se potrivi cu modelul specificat.

Dacă expresia regulată conține steagul g, metoda replace () înlocuiește orice potriviri pe care le găsește cu șirul de înlocuire. În caz contrar, înlocuiește doar prima potrivire pe care o găsește. Dacă primul argument al metodei replace () este un șir și nu o expresie regulată, atunci metoda efectuează o căutare literală a șirului, mai degrabă decât convertirea acestuia la o expresie regulată folosind constructorul RegExp (), ca căutare () metoda nu.

De exemplu, putem folosi metoda replace () pentru a scrie în mod constant cuvântul „JavaScript” pentru un întreg rând de text:

// Indiferent de majuscule, înlocuiți cu un cuvânt în cazul necesar var result = "javascript" .replace (/ JavaScript / ig, "JavaScript");

Metoda replace () este mai puternică decât ar putea sugera acest exemplu. Permiteți-mi să vă reamintesc că subexpresiile parantezate din interiorul unei expresii regulate sunt numerotate de la stânga la dreapta și că expresia regulată amintește textul care se potrivește cu fiecare dintre subexpresii. Dacă șirul de înlocuire conține un $ urmat de o cifră, metoda replace () înlocuiește aceste două caractere cu textul care se potrivește cu subexpresia specificată. Aceasta este o caracteristică foarte utilă. Îl putem folosi, de exemplu, pentru a înlocui ghilimele drepte într-un șir cu ghilimele tipografice, care sunt simulate de caractere ASCII:

// Un citat este un citat, urmat de orice număr de caractere care nu sunt citate (le amintim), // aceste caractere sunt urmate de un alt citat var quote = / "([^"] *) "/ g; // Înlocuiți ghilimelele drepte cu altele tipografice și lăsați „$ 1” neschimbat // conținutul citatului stocat în $ 1 var text = "„ JavaScript "este un limbaj de programare interpretat."; Var rezultat = text.replace (citat, " „$ 1” ”); //„ JavaScript ”este un limbaj de programare interpretat.

Un punct important de remarcat este că al doilea argument pentru a înlocui () poate fi o funcție care calculează dinamic șirul de înlocuire.

Metodă Meci () este cea mai comună dintre metodele de expresie regulată din clasa String. Acesta ia o expresie regulată ca singur argument (sau își convertește argumentul într-o expresie regulată trecând-o la constructorul RegExp ()) și returnează o matrice care conține rezultatele căutării. Dacă steagul g este setat în expresia regulată, metoda returnează o serie de toate potrivirile din șir. De exemplu:

// va returna ["1", "2", "3"] var result = "1 plus 2 este egal cu 3" .match (/ \ d + / g);

Dacă expresia regulată nu conține steagul g, metoda match () nu efectuează o căutare globală; doar caută primul meci. Cu toate acestea, match () returnează o matrice chiar și atunci când metoda nu efectuează o căutare globală. În acest caz, primul element al matricei este șirul găsit, iar toate elementele rămase sunt subexpresii ale expresiei regulate. Prin urmare, dacă match () returnează o matrice arr, atunci arr va conține întregul șir găsit, arr va conține șirul care se potrivește cu prima subexpresie și așa mai departe. Paralelând metoda replace (), putem spune că arr [n] este umplut cu conținutul lui $ n.

De exemplu, aruncați o privire la următorul cod pentru a analiza o adresă URL:

Var url = /(\w+):\/\/((\w.tory+)\/(\S*)/; var text = "Vizitați site-ul nostru http: //www..php"; var result = text.match (url); if (result! = null) (var fullurl = result; // Conține "http: //www..php" var protocol = result; // Conține "http" var host = result; // Conține "www..php ")

Trebuie remarcat faptul că, pentru o expresie regulată care nu are setat steagul global de căutare g, metoda match () returnează aceeași valoare ca și metoda exec () a expresiei regulate: matricea returnată are proprietăți index și de intrare, ca descris în discuția exec () de mai jos.

Ultima dintre metodele obiectului String care folosește expresii regulate este Despică ()... Această metodă împarte șirul pentru care este apelat într-o matrice de șiruri folosind argumentul ca delimitator. De exemplu:

"123.456.789" .split (","); // Returnează ["123", "456", "789"]

Metoda split () poate lua, de asemenea, o expresie regulată ca argument. Acest lucru face ca metoda să fie mai puternică. De exemplu, puteți specifica un delimitator care permite un număr arbitrar de caractere spațiale pe ambele părți:

"1, 2, 3, 4, 5" .split (/ \ s *, \ s * /); // Returnează ["1", "2", "3", "4", "5"]

Obiect RegExp

După cum sa menționat, expresiile regulate sunt reprezentate ca obiecte RegExp. În plus față de constructorul RegExp (), obiectele RegExp acceptă trei metode și mai multe proprietăți.

Constructorul RegExp () ia unul sau două argumente șir și creează un nou obiect RegExp. Primul argument pentru constructor este un șir care conține corpul expresiei regulate, adică textul care trebuie să apară între caractere oblice în literalul regex. Rețineți că literele șirului și expresiile regulate utilizează caracterul \ pentru a indica secvențe de evadare, astfel încât atunci când treceți expresia regulată la constructorul RegExp () ca un literal șir, trebuie să înlocuiți fiecare \ cu o pereche \\.

Al doilea argument pentru RegExp () poate lipsi. Dacă este specificat, acesta definește steagurile expresiei regulate. Trebuie să fie unul dintre caracterele g, i, m sau o combinație a acestor caractere. De exemplu:

// Găsește toate numerele din 5 cifre dintr-un șir. Notă // utilizarea \\ var zipcode = new RegExp ("\\ d (5)", "g");

Constructorul RegExp () este util atunci când expresia regulată este generată dinamic și, prin urmare, nu poate fi reprezentată folosind sintaxa literală a expresiei regulate. De exemplu, pentru a găsi un șir introdus de utilizator, creați o expresie regulată în timpul rulării folosind RegExp ().

Proprietăți RegExp

Fiecare obiect RegExp are cinci proprietăți. Proprietate sursă- un șir de numai citire care conține textul expresiei regulate. Proprietate global - boolean Un pavilion numai în citire care specifică pavilionul g în expresia regulată. Proprietate ignoreCase este o valoare booleană de numai citire care determină dacă steagul i este prezent în expresia regulată. Proprietate multiliniu este o valoare booleană de numai citire care specifică prezența steagului m în expresia regulată. Și ultima proprietate lastIndex este un număr întreg de citire / scriere. Pentru modelele cu steagul g, această proprietate conține numărul poziției din șirul de la care ar trebui să înceapă următoarea căutare. După cum este descris mai jos, este utilizat de metodele exec () și test ().

Metode RegExp

Obiectele RegExp definesc două metode care efectuează potrivirea modelelor; se comportă similar metodelor clasei String descrise mai sus. Principala metodă a clasei RegExp folosită pentru potrivirea modelelor este exec ()... Este similar cu metoda match () menționată anterior a clasei String, cu excepția faptului că este o metodă a clasei RegExp care ia un șir ca argument și nu o metodă a clasei String care ia un argument RegExp.

Metoda exec () execută o expresie regulată pe șirul specificat, adică caută o potrivire într-un șir. Dacă nu se găsește nicio potrivire, metoda returnează nul. Cu toate acestea, dacă se găsește o potrivire, aceasta returnează aceeași matrice ca matricea returnată de metoda match () pentru căutarea fără semnalul g. Elementul zero al tabloului conține șirul care se potrivește cu expresia regulată, iar toate elementele ulterioare sunt șiruri care se potrivesc cu toate subexpresiile. În plus, proprietatea index conține numărul poziției caracterului cu care începe fragmentul corespunzător și proprietatea intrare se referă la șirul căutat.

Spre deosebire de match (), metoda exec () returnează o matrice a cărei structură nu depinde de prezența steagului g în expresia regulată. Permiteți-mi să vă reamintesc că atunci când treceți o expresie globală regulată, metoda match () returnează o serie de potriviri găsite. Și exec () returnează întotdeauna o potrivire, dar oferă despre aceasta informații complete... Când exec () este apelat la o expresie regulată care conține steagul g, metoda setează proprietatea lastIndex a obiectului de expresie regulată la numărul de poziție al caracterului imediat după subșirul găsit.

Când metoda exec () este numită a doua oară pentru aceeași expresie regulată, începe să caute la caracterul a cărui poziție este specificată în proprietatea lastIndex. Dacă exec () nu găsește o potrivire, proprietatea lastIndex este setată la 0. (Puteți seta lastIndex la zero în orice moment, ceea ce ar trebui făcut în toate cazurile în care căutarea se finalizează înainte de ultima potrivire pe aceeași linie este găsit și începe să caute pe un alt șir cu același obiect RegExp.) Acest comportament special permite executarea repetată a executării () pentru a itera pe toate potrivirile de expresii regulate din șir. De exemplu:

Var pattern = / Java / g; var text = "JavaScript este mai amuzant decât Java!"; var rezultat; while ((result = pattern.exec (text))! = null) (console.log ("Found" "+ result +" "" + "at position" + result.index + "; următoarea căutare va începe cu" + model .lastIndex);)

O altă metodă a obiectului RegExp - Test () ceea ce este mult mai simplu decât metoda exec (). Ia un șir și returnează adevărat dacă șirul se potrivește cu o expresie regulată:

Var pattern = / java / i; pattern.test („JavaScript”); // Returnează adevărat

Testarea apelului () este echivalentă cu apelarea exec (), care returnează true dacă exec () returnează non-nul. Din acest motiv, metoda test () se comportă la fel ca metoda exec () atunci când este apelată pentru o expresie globală regulată: începe să caute șirul specificat la poziția dată de proprietatea lastIndex și, dacă găsește o potrivire, setează proprietatea lastIndex la numărul poziției caracterului, chiar lângă potrivirea găsită. Prin urmare, folosind metoda test (), puteți forma, de asemenea, o buclă pentru parcurgerea unei linii ca și metoda exec ().

RegExp nou (model [, steaguri])

regex ÎNAINTE

Se știe că sintaxa literală preferată(/ test / i).

Dacă expresia regulată nu este cunoscută în prealabil, atunci este de preferat să creați expresia regulată (într-un șir de caractere) folosind constructorul (noul RegExp).

Dar atenție, deoarece „slash înainte” \ joacă rolul de a comuta codul, atunci în șirul literal (noul RegExp) trebuie scris de două ori: \\

Steaguri

Ignor majuscule la potrivire

g potrivire globală, spre deosebire de local (în mod implicit, potrivire numai prima instanță a modelului) permite potriviri pentru toate instanțele modelului

Operatori

Ce Cum Descriere Utilizare
eu steag face reg. expresia este nesensibilă la majuscule / testik / i
g steag căutare globală / testik / g
m steag poate fi asortat cu multe șiruri care pot fi preluate din textarea
operatorul clasei de caractere potrivirea setului de caractere - orice caracter din intervalul de la a la z;
^ operator caret cu exceptia [^ a-z] - orice caracter EXCEPTE caractere din intervalul de la a la z;
- operator cratimă indica gama de valori, inclusiv - orice caracter din intervalul de la a la z;
\ operator care scapă scapă de orice personaj următor \\
^ operator start start potrivirea tiparului trebuie să se întâmple la început / ^ testik / g
$ operator final de meci potrivirea modelelor ar trebui să se întâmple la sfârșit / testik $ / g
? operator? face ca caracterul să fie opțional / t? est / g
+ operator + / t + est / g
+ operator + simbolul trebuie să fie prezent o dată sau în mod repetat / t + est / g
* operator * simbolul trebuie să fie prezent o dată sau în mod repetat sau deloc / t + est / g
{} operator () setați un număr fix de repetări ale personajului / t (4) est / g
{,} operator (,) setați numărul de repetări ale unui personaj în anumite limite / t (4,9) est / g

Clase de caractere predefinite

Membru predefinit Comparaţie
\ t filă orizontală
\ n Traducere linie
. Orice caracter, altul decât feedul de linie
\ d Orice a zecea cifră, care este la fel ca
\ D Orice caracter, altul decât a zecea cifră, care este același cu [^ 0-9]
\ w Orice caracter (cifre, litere și subliniere) care este același
\ W Orice caracter, altele decât numerele, literele și subliniul, care este același cu [^ A-Za-z0-9]
\ s Orice caracter spațial
\ S Orice personaj altul decât un spațiu
\ b Limita cuvântului
\ B NU o limită de cuvânt, ci internă. parte

Grupare ()

Dacă doriți să aplicați un operator, de exemplu, + (/ (abcd) + /) unui grup de membri, puteți utiliza paranteze ().

Fixare

Se numește partea din expresia regulată cuprinsă între paranteze () fixare.

Luați în considerare următorul exemplu:

/ ^ () k \ 1 /

\ 1 nu este niciun caracter din a, b, c.
\ 1 este orice caracter care inițiază potriviți primul personaj... Adică, caracterul asociat cu \ 1 este necunoscut până la rezolvarea regexului.

Grupuri non-fixe

Parantezele () sunt utilizate în 2 cazuri: pentru grupare și pentru comitere. Dar există situații în care trebuie să folosim () numai pentru grupare, deoarece un commit nu este necesar, în plus, prin eliminarea de commit-uri inutile, îl simplificăm pentru motorul de procesare a expresiilor obișnuite.

Deci la preveni comitereaînainte de paranteza de deschidere, trebuie să puneți:?:

Str = "

Buna ziua lume!
"; găsit = str.match (/<(?:\/?)(?:\w+)(?:[^>] *?)> / i); console.log ("găsit fără corecție:", găsit); // ["
" ]

Funcția de testare

Regexp.test ()

Funcția de testare verifică dacă expresia regulată se potrivește cu șirul (str). Returnează fie adevărat, fie fals.

Exemplu de utilizare:

Javascript

function codeF (str) (return /^\d(5)-\d(2)/.test(str);) //console.log(codeF("12345-12ss ")); // true //console.log(codeF("1245-12ss ")); // fals

Funcția de potrivire

str.match (regexp)

Funcția de potrivire returnează o serie de valori sau nulă dacă nu se găsește nicio potrivire. Verifică: dacă semnalul g este absent în expresia regulată (pentru efectuarea unei căutări globale), atunci metoda de potrivire va returna prima potrivire din șir, în timp ce, după cum puteți vedea din exemplu, într-o matrice de potriviri fii FIXAT(partea expresiei regulate cuprinsă între paranteze).

Javascript

str = "Pentru informații, consultați: Capitolul 3.4.5.1"; re = / head (\ d + (\. \ d) *) / i // cu comitetele (fără casetă de selectare globală) găsit = str.match (re) console.log (găsit); // ["Capitolul 3.4.5.1", "3.4.5.1", ".1"]

Dacă furnizați metoda match () cu o expresie globală regulată (cu steagul g), atunci va fi returnată și o matrice, dar cu meciuri GLOBALE... Adică, nu se returnează niciun rezultat angajat.

Javascript

str = "Pentru informații, consultați: Capitolul 3.4.5.1, Capitolul 7.5"; re = / head (\ d + (\. \ d) *) / ig // no commits - global found = str.match (re) console.log (found); // ["Capitolul 3.4.5.1", "Capitolul 7.5"]

Funcția Exec

regexp.exec (str)

Funcția exec verifică dacă expresia regulată se potrivește cu șirul (str). Returnează o serie de rezultate (cu confirmări) sau nule. Fiecare apel ulterior către metoda exec (de exemplu, când se utilizează while) are loc (din cauza actualizare automata când executați executarea indexului la sfârșitul ultimei căutări lastIndex) mergeți la următoarea potrivire globală (dacă este bifat semnalul g).

Javascript

var html = "
BAM! VAGABOND!
"; var reg = /<(\/?)(\w+)([^>] *?)> / g; //console.log(reg.exec(html)); // ["
"," "," div "," class = "test" "] while ((match = reg.exec (html))! == null) (console.log (reg.exec (html));) / * [" "," "," b "," "] [" "," "," em "," "] ["
"," / "," div "," "] * /

Fără un flag global, metodele de potrivire și executare funcționează identic. Adică, returnează o matrice cu primul meci global și se angajează.

Javascript

// match var html = "
BAM! VAGABOND!
"; var reg = /<(\/?)(\w+)([^>] *?)> /; // fără console.log global (html.match (reg)); // ["
"," "," div "," class = "test" "] // exec var html ="
BAM! VAGABOND!
"; var reg = /<(\/?)(\w+)([^>] *?)> /; // fără consolă globală.log (reg.exec (html)); // ["
"," "," div "," class = "test" "]

Înlocuiți funcția

str.replace (regexp, newSubStr | funcție)
  • regexp - reg. expresie;
  • newSubStr - linia la care se schimbă expresia găsită în text;
  • funcție - apelată pentru fiecare potrivire găsită cu o listă de parametri variabili (reamintim că o căutare globală într-un șir găsește toate instanțele unei potriviri de tipare).

Valoarea returnată a acestei funcții servește ca înlocuitoare.

Parametrii funcției:

  • 1 - Completați substringul potrivit.
  • 2 - Semnificația grupurilor de paranteze (fixări).
  • 3 - Indexul (poziția) meciului în șirul original.
  • 4 - Șirul original.

Metoda nu modifică șirul de apelare, dar returnează unul nou după înlocuirea potrivirilor. Pentru a efectua o căutare globală și înlocuiți, utilizați regexp cu steagul g.

"GHGHGHGTTTT" .replace (// g, "K"); // "KKKKKKKKKKKK"

Javascript

function upLetter (allStr, letter) (return letter.toUpperCase ();) var res = "border-top-width" .replace (/ - (\ w) / g, upLetter); console.log (res); // borderTopWidth

Ultima actualizare: 1.11.2015

Expresii obisnuite reprezintă un model care este folosit pentru a găsi sau modifica un șir. Pentru a lucra cu expresii regulate în JavaScript, este definit un obiect RegExp.

Există două moduri de a defini o expresie regulată:

Var myExp = / hello /; var myExp = new RegExp ("salut");

Expresia regulată folosită aici este destul de simplă: constă dintr-un singur cuvânt „salut”. În primul caz, expresia este plasată între două bare oblice, iar în al doilea caz, este utilizat constructorul RegExp, în care expresia este transmisă ca un șir.

Metode RegExp

Pentru a determina dacă o expresie regulată se potrivește cu un șir, metoda test () este definită în obiectul RegExp. Această metodă returnează adevărat dacă șirul se potrivește cu expresia regulată și fals dacă nu.

Var initialText = "buna lume!"; var exp = / salut /; var result = exp.test (initialText); document.write (rezultat + "
"); // adevărat initialText =" vreme frumoasă "; rezultat = exp.test (initialText); document.write (rezultat); // false - nu există" salut "în linia initialText

Metoda exec funcționează similar - verifică, de asemenea, dacă șirul se potrivește cu o expresie regulată, doar că acum această metodă returnează partea șirului care se potrivește cu expresia. Dacă nu există nicio potrivire, atunci se returnează nul.

Var initialText = "buna lume!"; var exp = / salut /; var result = exp.exec (initialText); document.write (rezultat + "
"); // salut initialText =" vreme frumoasă "; rezultat = exp.exec (text inițial); document.write (rezultat); // null

Grupuri de caractere

O expresie regulată nu trebuie să fie șiruri regulate, dar poate include și elemente speciale de sintaxă a expresiei regulate. Unul dintre aceste elemente reprezintă grupuri de caractere cuprinse între paranteze drepte. De exemplu:

Var initialText = "aparari"; var exp = / [abc] /; var result = exp.test (initialText); document.write (rezultat + "
"); // true initialText =" city "; result = exp.test (initialText); document.write (result); // false

Expresia [abc] indică faptul că șirul trebuie să aibă una din cele trei litere.

Dacă trebuie să determinăm prezența caracterelor alfabetice dintr-un anumit interval într-un șir, atunci putem seta acest interval o dată:

Var initialText = "aparari"; var exp = / [a-z] /; var result = exp.test (initialText); document.write (rezultat + "
"); // true initialText =" 3di0789 "; result = exp.test (initialText); document.write (result); // false

În acest caz, șirul trebuie să conțină cel puțin un caracter din gama a-z.

Dacă, dimpotrivă, nu este necesar ca șirul să aibă numai anumite caractere, atunci este necesar să puneți semnul ^ între paranteze drepte înainte de enumerarea caracterelor:

Var initialText = "aparari"; var exp = / [^ a-z] /; var result = exp.test (initialText); document.write (rezultat + "
"); // false initialText =" 3di0789 "; exp = / [^ 0-9] /; result = exp.test (initialText); document.write (rezultat); // true

În primul caz, șirul nu trebuie să aibă numai caractere din intervalul az, dar din moment ce șirul „apărare” constă numai din caractere din acest interval, metoda test () returnează fals, adică expresia regulată nu se potrivește cu stoc.

În al doilea caz („3di0789”), șirul nu trebuie să conțină doar caractere numerice. Dar, deoarece șirul conține și litere, șirul se potrivește cu expresia regulată, astfel încât metoda de testare revine adevărată.

Dacă este necesar, putem colecta combinații de expresii:

Var initialText = "acasa"; var exp = / [dt] o [nm] /; var result = exp.test (initialText); document.write (rezultat); // Adevărat

Expresia [dt] o [nm] indică acele șiruri care pot conține șiruri „casă”, „volum”, „nu”, „ton”.

Proprietăți de expresie

    Proprietatea globală vă permite să găsiți toate șirurile care se potrivesc cu expresia regulată. În mod implicit, atunci când căutați șiruri, expresia regulată selectează primul șir găsit din șirul care se potrivește cu expresia. Deși pot exista multe șiruri într-un șir care se potrivesc și cu expresia. Pentru aceasta, această proprietate este utilizată sub forma simbolului g în expresii

    Proprietatea ignoreCase vă permite să găsiți șiruri de caractere care se potrivesc cu expresia regulată, indiferent de cazul caracterelor din șir. Pentru a face acest lucru, caracterul i este utilizat în expresiile regulate

    Proprietatea cu mai multe linii vă permite să găsiți șiruri de caractere care se potrivesc cu o expresie regulată în textul cu mai multe linii. Pentru a face acest lucru, simbolul m este utilizat în expresiile regulate.

De exemplu:

Var initialText = "buna lume"; var exp = / world /; var result = exp.test (initialText); // fals

Nu există nicio potrivire între șir și expresie, deoarece „Lumea” diferă de „lume” în caz. În acest caz, trebuie să modificați expresia regulată adăugând proprietatea ignoreCase la aceasta:

Var exp = / world / i;

Ei bine, putem folosi și mai multe proprietăți simultan.