Javascript, müntəzəm ifadə: nümunələr, müntəzəm ifadələrin yoxlanılması. JavaScript-də müntəzəm ifadələr üçün bələdçi Daimi ifadələr php xüsusi simvolları




yeni RegExp(naxış[, bayraqlar])

ƏVVƏL müntəzəm ifadə

Məlumdur ki hərfi sintaksisə üstünlük verilir(/test/i).

Əgər nizamlı ifadə əvvəlcədən məlum deyilsə, o zaman (yeni RegExp) konstruktorundan istifadə edərək müntəzəm ifadə (simvol sətirində) yaratmaq daha məqsədəuyğundur.

Ancaq diqqət yetirin, çünki "slash işarəsi" \ kod açarı rolunu oynayır, onda sətir literalında (yeni RegExp) iki dəfə yazılmalıdır: \\

Bayraqlar

uyğunlaşdıqda halı nəzərə almıram

g qlobal uyğunluq, lokaldan fərqli olaraq (defolt olaraq, nümunənin yalnız ilk nümunəsinə uyğun gəlir) nümunənin bütün nümunələri ilə uyğunluqlara imkan verir

Operatorlar

Necə Təsvir İstifadəsi
i bayraq reg edir. hərflərə həssas olmayan ifadə /testik/i
g bayraq qlobal axtarış /testik/g
m bayraq mətn sahəsindən əldə edilə bilən bir çox sətirlə uyğunlaşmağa imkan verir
simvol sinfi operatoru simvol dəsti uyğunluğu - a-dan z-ə qədər olan hər hansı simvol;
^ karet operatoru istisna olmaqla [^a-z] - a-dan z-ə qədər diapazondakı simvollardan başqa istənilən simvol;
- defis operatoru daxil olmaqla, dəyərlər diapazonunu təyin edin - a-dan z-ə qədər olan hər hansı simvol;
\ qaçış operatoru hər hansı aşağıdakı xarakterdən qaçır \\
^ uyğun başlanğıc operatoru nümunə uyğunluğu başlanğıcda baş verməlidir /^testik/g
$ matçın sonu operatoru nümunə uyğunluğu sonunda baş verməlidir /testik$/g
? operator? personajı isteğe bağlıdır /t?est/g
+ operator + /t+est/g
+ operator + personaj bir dəfə və ya bir neçə dəfə iştirak etməlidir /t+est/g
* operator * simvol bir dəfə və ya dəfələrlə mövcud olmalıdır və ya ümumiyyətlə olmamalıdır /t+est/g
{} operator () simvol təkrarlarının sabit sayını təyin edin /t(4)est/g
{,} operator (,) müəyyən məhdudiyyətlər daxilində simvolun təkrar sayını təyin edin /t(4,9)est/g

Əvvəlcədən təyin edilmiş xarakter sinifləri

əvvəlcədən təyin edilmiş üzv Xəritəçəkmə
\t üfüqi nişan
\n Sətir tərcüməsi
. Xətt axınından başqa istənilən simvol
\d Ekvivalent olan istənilən onuncu rəqəm
\D Onuncu rəqəmdən başqa hər hansı simvol, [^0-9] ilə bərabərdir
\w Ekvivalent olan hər hansı simvol (rəqəmlər, hərflər və alt xətt).
\W [^A-Za-z0-9] ilə bərabər olan rəqəmlər, hərflər və alt xəttdən başqa istənilən simvol
\s İstənilən boşluq simvolu
\S Boşluqdan başqa istənilən simvol
\b söz sərhədi
\B Sözün sərhədi DEYİL, daxilidir. Hissə

qruplaşdırma()

Əgər üzvlər qrupuna + (/(abcd)+/) kimi operator tətbiq edilməlidirsə, mötərizələrdən () istifadə edilə bilər.

Fiksasiyalar

Normal ifadənin mötərizə () içərisində olan hissəsi deyilir fiksasiya.

Aşağıdakı misalı nəzərdən keçirək:

/^()k\1/

\1 a , b , c simvollarından heç bir simvol deyil .
\1 başlayan hər hansı simvoldur ilk xarakterə uyğun gəlir. Yəni \1 ilə uyğun gələn simvol nizamlı ifadə həll olunana qədər naməlumdur.

Qeyri-sabit qruplar

Mötərizələr () 2 halda istifadə olunur: qruplaşdırmaq və öhdəlikləri bildirmək üçün. Ancaq elə vəziyyətlər var ki, () yalnız qruplaşdırma üçün istifadə etməliyik, çünki heç bir fiksasiya tələb olunmur, əlavə olaraq, lazımsız fiksasiyaları aradan qaldıraraq, müntəzəm ifadə emal mühərrikinin işləməsini asanlaşdırırıq.

Beləliklə fiksasiyanın qarşısını alır açılış mötərizəsindən əvvəl:

Str = "

Salam dünya!
"; tapıldı = str.match(/<(?:\/?)(?:\w+)(?:[^>]*?)>/i); console.log("düzəlmədən tapıldı: ", tapıldı); // ["
" ]

test funksiyası

Regexp.test()

Test funksiyası müntəzəm ifadənin sətirlə (str) uyğun olub olmadığını yoxlayır. Doğru və ya yalanı qaytarır.

İstifadə nümunəsi:

javascript

funksiya koduF(str)( qaytarmaq /^\d(5)-\d(2)/.test(str); ) //console.log(codeF("12345-12ss")); // doğru //console.log(codeF("1245-12ss")); // yalan

uyğunluq funksiyası

str.match(regexp)

Uyğunluq funksiyası dəyərlər massivini qaytarır və ya uyğunluq tapılmadıqda null verir. Yoxlayın: əgər normal ifadədə g bayrağı yoxdursa (qlobal axtarışı yerinə yetirmək üçün), onda uyğunluq metodu misaldan göründüyü kimi uyğunluqlar massivində sətirdə ilk uyğunluğu qaytaracaq. TƏKLİF(mötərizədə verilmiş müntəzəm ifadənin bir hissəsi).

javascript

str = "Məlumat üçün bax: Fəsil 3.4.5.1"; re = /fəsil (\d+(\.\d)*)/i // öhdəliklərlə (qlobal bayraq tapılmadı) = str.match(re) console.log(tapıldı); // ["Fəsil 3.4.5.1", "3.4.5.1", ".1"]

Əgər match() metodunu qlobal normal ifadə ilə (g bayrağı ilə) təmin etsəniz, massiv də qaytarılacaq, lakin QLOBAL matçlarla. Yəni qəbul edilmiş nəticələr geri qaytarılmır.

javascript

str = "Məlumat üçün bax: Fəsil 3.4.5.1, Fəsil 7.5"; re = /fəsil (\d+(\.\d)*)/ig // heç bir öhdəlik yoxdur - qlobal olaraq tapılmadı = str.match(re) console.log(tapıldı); // ["Fəsil 3.4.5.1", "Fəsil 7.5"]

icra funksiyası

regexp.exec(küç)

Exec funksiyası müntəzəm ifadənin sətirlə (str) uyğun olub olmadığını yoxlayır. Nəticələr massivini (təhsilləri ilə) və ya null qaytarır. Exec metoduna hər bir sonrakı çağırış (məsələn, while istifadə etməklə) növbəti qlobal uyğunluğa (əgər g bayrağı göstərilibsə) sıçrayır (exec yerinə yetirildikdə sonuncu axtarış lastIndex-in son indeksini avtomatik yeniləməklə).

javascript

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

Qlobal bayraq olmadan matç və icra üsulları eyni işləyir. Yəni, onlar ilk qlobal uyğunluq və öhdəlikləri olan bir massiv qaytarırlar.

javascript

// uyğun var html = "
BAM! BUM!
";varreg=/<(\/?)(\w+)([^>]*?)>/; // heç bir qlobal console.log(html.match(reg)); // ["
", "", "div", " class="test""] // exec var html = "
BAM! BUM!
";varreg=/<(\/?)(\w+)([^>]*?)>/; // heç bir qlobal console.log(reg.exec(html)); // ["
", "", "div", " class="test""]

funksiyasını əvəz edin

str.replace(regexp, newSubStr|funksiya)
  • regexp - reg. ifadə;
  • newSubStr - mətndə tapılan ifadənin dəyişdirildiyi sətir;
  • funksiya - parametrlərin dəyişən siyahısı ilə tapılan hər bir uyğunluq üçün çağırılır (xatırlayın ki, qlobal axtarış sətirdə nümunə uyğunluğunun bütün nümunələrini tapır).

Bu funksiyanın qaytarılması dəyəri əvəzedici kimi xidmət edir.

Funksiya parametrləri:

  • 1 - Tam uyğun alt sətir.
  • 2 - Mötərizədə qrupların mənası (fiksasiyalar).
  • 3 - Mənbə sətirindəki uyğunluğun indeksi (mövqeyi).
  • 4 - Mənbə sətri.

Metod zəng sətirini dəyişmir, lakin uyğunluqları əvəz etdikdən sonra yenisini qaytarır. Qlobal axtarış etmək və əvəz etmək üçün g bayrağı ilə regexp istifadə edin.

"GHGHGHGTTTT".əvəz edin(//g,"K"); //"KKKKKKKKKKK"

javascript

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

Adi ifadələr mətnlərdə söz və ifadələri silmək, çıxarmaq və ya əvəz etmək üçün çevik axtarışa icazə verin.

Sintaksis:

//Normal ifadə yaratmağın ilk yolu var regexp=new RegExp( nümunə,dəyişdiricilər); //Normal ifadə yaratmaq üçün ikinci seçim var regexp=/ nümunə/dəyişdiricilər;

nümunə axtarış üçün simvol modelini təyin etməyə imkan verir.

dəyişdiricilər axtarışın davranışını fərdiləşdirməyə imkan verir:

  • i- məktubların işinə baxmadan axtarış;
  • g- qlobal axtarış (sənəddəki bütün uyğunluqlar yalnız birinci deyil, tapılacaq);
  • m- çox sətirli axtarış.

Söz və ifadələri axtarın

Daimi ifadələrin ən sadə istifadəsi müxtəlif mətnlərdə söz və ifadələri axtarmaqdır.

Modifikatorlarla axtarışdan istifadə nümunəsi:

//Rv1 rv1=/Rusiya/ müntəzəm ifadəsini təyin edin; //Rv2 normal ifadəsini təyin edin rv2=/Rusiya/g; //Rv3 müntəzəm ifadəsini təyin edin rv3=/Russia/ig; //Rv1 //ifadəsindən istifadə edərkən mətndə uyğunluqların tapılacağı qalın hərflərlə vurğulanır: Rusiya dünyanın ən böyük ölkəsidir. Rusiya 18 ölkə ilə həmsərhəddir. RUSİYA SSRİ-nin varisi dövlətdir. //Rv2 //ifadəsindən istifadə edərkən mətndə uyğunluqların tapılacağı qalın hərflərlə vurğulanır: Rusiya dünyanın ən böyük ölkəsidir. Rusiya 18 ölkə ilə həmsərhəddir. RUSİYA SSRİ-nin varisi dövlətidir."; //Rv3 //ifadəsindən istifadə edərkən mətndə uyğunluqların tapılacağı qalın hərflərlə vurğulanır: Rusiya dünyanın ən böyük dövlətidir. Rusiya 18 ölkə ilə həmsərhəddir. RUSİYA SSRİ-nin varisi dövlətidir.”;

Xüsusi simvollar

Normal simvollara əlavə olaraq, müntəzəm ifadə nümunələri istifadə edə bilər Xüsusi simvollar(meta personajlar). Təsviri olan xüsusi simvollar aşağıdakı cədvəldə göstərilmişdir:

Xüsusi xarakter Təsvir
. Sətir sonu simvolundan başqa istənilən simvola uyğun gəlir.
\w İstənilən əlifba simvoluna uyğun gəlir.
\W İstənilən qeyri-əlifba simvoluna uyğun gəlir.
\d Rəqəm olan simvollara uyğun gəlir.
\D Rəqəm olmayan simvollara uyğun gəlir.
\s Boşluq simvollarına uyğun gəlir.
\S Boşluq olmayan simvollara uyğun gəlir.
\b Uyğunluqlar yalnız söz sərhədlərində (əvvəlində və ya sonunda) tapılacaq.
\B Uyğunluqlar yalnız sözlərin hüdudlarında axtarılmayacaq.
\n Yeni sətir simvoluna uyğun gəlir.

/* Reg1 ifadəsi iki ixtiyari hərflə başlayan və "yaş" ilə bitən bütün sözləri tapacaq. Cümlədəki sözlər boşluqla ayrıldığından, o zaman əvvəlində və sonunda xüsusi simvol əlavə edirik \s) */ reg1=/\s..vet\s/g; txt="salam əhd məxmər şkafı"; sənəd.write(txt.match(reg1) + "
"); /* Reg2 ifadəsi üç ixtiyari hərflə başlayan və "wt" ilə bitən bütün sözləri tapacaq */ reg2=/\s...wt\s/g; document.write(txt.match(reg2) + "
"); txt1=" salam salam salam "; /* Reg3 ifadəsi "with" ilə başlayan və ardınca 1 rəqəmlə bitən və "wt" ilə bitən bütün sözləri tapacaq */ var reg3=/when\dwt/g; document . yaz (txt1.match(reg3) + "
"); // reg4 ifadəsi mətndəki bütün rəqəmləri tapacaq var reg4=/\d/g; txt2="5 il təhsil, 3 il üzgüçülük, 9 il atıcılıq." document.write(txt2. uyğunluq (reg4) + "
");

Sürətli görünüş

Kvadrat mötərizədə simvollar

Kvadrat mötərizələrdən istifadə [keyu] Axtarmaq üçün simvollar qrupunu təyin edə bilərsiniz.

Kvadrat mötərizədə simvollar qrupundan əvvəl ^ simvolu [^kvg] verilənlərdən başqa əlifbanın bütün simvollarını axtarmaq lazım olduğunu söyləyir.

Kvadrat mötərizədə simvollar arasında tire (-) işarəsindən istifadə edin [a-h] Axtarmaq üçün bir sıra simvol təyin edə bilərsiniz.

Siz həmçinin kvadrat mötərizələrdən istifadə edərək nömrələri axtara bilərsiniz.

//reg1 normal ifadəsini təyin edin reg1=/\sko[tdm]\s/g; //Mətn sətirini təyin edin txt1 txt1=" pişik örgü kodu şifonyer com xalça "; //Gəlin txt1 sənəd sətirini axtarmaq üçün reg1 adi ifadəsindən istifadə edək.write(txt1.match(reg1) + "
"); reg2=/\sslo[^tg]/g; txt2="slot fil hecası"; document.write(txt2.match(reg2) + "
"); reg3=//g; txt3="5 il təhsil, 3 il üzgüçülük, 9 il atıcılıq"; document.write(txt3.match(reg3));

Sürətli görünüş

Kəmiyyət göstəriciləri

Kəmiyyət göstəricisi- bu, özündən əvvəlki xarakter və ya simvollar qrupunun matçda neçə dəfə baş verməsini təyin etməyə imkan verən konstruksiyadır.

Sintaksis:

//Əvvəlki simvol x - dəfə baş verməlidir (x)//Əvvəlki simvol x-dən y-ə qədər daxil olmalıdır (x,y)//Əvvəlki simvol ən azı x dəfə baş verməlidir (x,)//Əvvəlki simvolun 0 və ya daha çox dəfə baş verməli olduğunu müəyyən edir * //Əvvəlki simvolun 1 və ya daha çox dəfə baş verməli olduğunu müəyyən edir + //Əvvəlki simvolun 0 və ya 1 dəfə baş verməli olduğunu müəyyən edir ?


//Rv1 adi ifadəsini təyin edin rv1=/ko(5)shka/g //Normal ifadəni təyin edin rv2 rv2=/ko(3,)shka/g //Rv3 normal ifadəsini təyin edin rv3=/ko+shka/g //Rv4 adi ifadəsini təyin edin rv4=/cat?cat/g //Normal ifadəni təyin edin rv5 rv5=/cat*cat/g //Qalın rənglə yazın //ifadə rv1: cat cat istifadə edərkən mətndə uyğunluqların harada tapılacağını göstərir. pişik pişiyioooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooomkkksınız? cooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooook//Qalın işarə, //ifadə rv3: kshka istifadə edərkən mətndə uyğunluqların harada tapılacağını göstərir pişik pişik//rv4 ifadəsindən istifadə edərkən qalın hərf mətndə uyğunluqların harada tapılacağını göstərir: kshka pişik pişiyioooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: kshka pişiyi

Qeyd: hər hansı xüsusi simvoldan (məsələn, .* +? və ya ()) normal simvol kimi istifadə etmək istəyirsinizsə, ondan əvvəl \ işarəsi qoymalısınız.

Mötərizənin istifadəsi

Normal ifadə nümunəsinin bir hissəsini mötərizə içərisinə daxil etməklə, siz ifadəyə nümunənin həmin hissəsinin tapdığı uyğunluğu yadda saxlamasını bildirirsiniz. Saxlanmış uyğunluq daha sonra kodunuzda istifadə edilə bilər.

Məsələn, /(Dmitri)\sVasilyev/ müntəzəm ifadəsi "Dmitri Vasilyev" sətirini tapacaq və "Dmitri" alt sətirini xatırlayacaqdır.

Aşağıdakı misalda biz mətndəki sözlərin sırasını dəyişmək üçün replace() metodundan istifadə edirik. Saxlanmış uyğunluqlara daxil olmaq üçün $1 və $2 istifadə edirik.

Var regexp = /(Dmitri)\s(Vasiliev)/; var text = "Dmitri Vasiliev"; var newtext = text.replace(regexp, "$2 $1"); sənəd.write(yeni mətn);

Sürətli görünüş

Mötərizələr kəmiyyət göstəricilərindən əvvəl simvolları qruplaşdırmaq üçün istifadə edilə bilər.

Adi ifadələr

Müntəzəm ifadə xarakter modelini təsvir edən obyektdir. JavaScript-də RegExp sinfi müntəzəm ifadələri təmsil edir və String və RegExp siniflərinin obyektləri nümunə uyğunluğu və mətnin dəyişdirilməsi əməliyyatlarını yerinə yetirmək üçün müntəzəm ifadələrdən istifadə edən metodları müəyyən edir. JavaScript-dəki nizamlı ifadə qrammatikası Perl 5-də istifadə olunan müntəzəm ifadə sintaksisinin kifayət qədər tam alt dəstini ehtiva edir, buna görə də Perl ilə tanışsınızsa, JavaScript proqramlarında asanlıqla nümunələr yaza bilməlisiniz.

ECMAScript-də dəstəklənməyən Perl müntəzəm ifadələrinin xüsusiyyətlərinə s (tək sətirli rejim) və x (genişlənmiş sintaksis) bayraqları daxildir; \a, \e, \l, \u, \L, \U, \E, \Q, \A, \Z, \z və \G qaçış ardıcıllığı və (?) ilə başlayan digər genişləndirilmiş konstruksiyalar.

Normal ifadələrin müəyyənləşdirilməsi

JavaScript-də müntəzəm ifadələr obyektlərlə təmsil olunur. Regexp. RegExp obyektləri RegExp() konstruktorundan istifadə etməklə yaradıla bilər, lakin daha çox onlar xüsusi hərfi sintaksisdən istifadə etməklə yaradılır. Sətir literalları dırnaq işarəsi içərisində olan simvollar kimi göstərildiyi kimi, müntəzəm ifadələrin hərfləri də bir cüt tire (/) içərisində olan simvollar kimi təyin olunur. Beləliklə, JavaScript kodu buna bənzər sətirlərdən ibarət ola bilər:

Varpattern = /s$/;

Bu sətir yeni RegExp obyekti yaradır və onu model dəyişəninə təyin edir. Bu RegExp obyekti "s" ilə bitən hər hansı sətirləri axtarır. Eyni normal ifadə RegExp() konstruktoru ilə müəyyən edilə bilər:

Varpattern = yeni RegExp("s$");

Normal ifadə nümunəsi spesifikasiyası simvollar ardıcıllığından ibarətdir. Əksər simvollar, o cümlədən bütün alfasayısal simvollar mövcud olması lazım olan simvolları hərfi mənada təsvir edir. Yəni, /java/ müntəzəm ifadəsi "java" alt sətirini ehtiva edən bütün sətirlərə uyğun gəlir.

Daimi ifadələrdəki digər simvollar onların dəqiq ekvivalentləri üçün axtarış üçün nəzərdə tutulmur, lakin xüsusi məna daşıyır. Məsələn, /s$/ müntəzəm ifadəsi iki simvoldan ibarətdir. Birinci simvol s hərfi xarakter axtarışını bildirir. İkincisi, $, xəttin sonunu qeyd edən xüsusi bir metaxarakterdir. Beləliklə, bu müntəzəm ifadə s ilə bitən istənilən sətirlə uyğun gəlir.

Aşağıdakı bölmələr JavaScript adi ifadələrində istifadə olunan müxtəlif simvolları və metaxarakterləri təsvir edir.

Hərfi simvollar

Daha əvvəl qeyd edildiyi kimi, müntəzəm ifadələrdəki bütün əlifba simvolları və rəqəmlər bir-birinə uyğun gəlir. JavaScript-in müntəzəm ifadə sintaksisi həmçinin əks xətt işarəsi (\) ilə başlayan qaçış ardıcıllığından istifadə edərək müəyyən qeyri-əlifba simvollarını təyin etmək qabiliyyətini dəstəkləyir. Məsələn, \n ardıcıllığı yeni sətir simvoluna uyğun gəlir. Bu simvollar aşağıdakı cədvəldə verilmişdir:

Bəzi durğu işarələri müntəzəm ifadələrdə xüsusi məna daşıyır:

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

Bu simvolların mənası aşağıdakı bölmələrdə izah olunur. Onlardan bəziləri yalnız müntəzəm ifadələrin müəyyən kontekstlərində xüsusi məna kəsb edir, digər kontekstlərdə isə hərfi mənada alınır. Lakin, ümumiyyətlə, bu simvollardan hər hansı birini hərfi mənada müntəzəm ifadəyə daxil etmək üçün ondan əvvəl tərs kəsik işarəsi qoymalısınız. Dırnaq işarələri və @ kimi digər simvolların heç bir xüsusi mənası yoxdur və sadəcə olaraq müntəzəm ifadələrdə özlərinə uyğun gəlir.

Əgər hansı simvoldan əvvəl \ işarəsinin olması lazım olduğunu dəqiq xatırlaya bilmirsinizsə, hər hansı simvoldan əvvəl tərs xətt qoya bilərsiniz. Bununla belə, unutmayın ki, bir çox hərf və rəqəmlər kəsik işarəsi ilə birlikdə xüsusi mənalar alır, ona görə də hərfi mənada axtardığınız hərf və rəqəmlərdən əvvəl \ işarəsi qoyulmamalıdır. Tərs kəsik işarəsinin özünü normal ifadəyə daxil etmək üçün siz açıq-aydın ondan əvvəl başqa tərs kəsik işarəsi qoymalısınız. Məsələn, aşağıdakı müntəzəm ifadə əks kəsik işarəsi olan istənilən sətirlə uyğun gəlir: /\\/.

Xarakter sinifləri

Fərdi hərfi simvolları kvadrat mötərizələrə daxil etməklə simvol siniflərinə birləşdirə bilərsiniz. Simvol sinfi həmin sinifdə olan istənilən simvola uyğun gəlir. Buna görə // müntəzəm ifadəsi a, b və ya c simvollarından birinə uyğun gəlir.

Mötərizədə verilən simvollardan başqa istənilən simvola uyğun gələn inkar edilmiş simvol sinifləri də müəyyən edilə bilər. İnkar edilmiş simvol sinfi sol mötərizədən sonrakı ilk simvol kimi ^ simvolu ilə müəyyən edilir. Normal ifadə /[^abc]/ a, b və ya c-dan başqa istənilən simvola uyğun gəlir. Simvol siniflərində bir sıra simvollar tire ilə göstərilə bilər. Bütün kiçik Latın hərfləri // ifadəsi ilə axtarılır və Latın simvol dəstindən istənilən hərf və ya rəqəm // ifadəsi ilə tapıla bilər.

Müəyyən simvol sinifləri xüsusilə tez-tez istifadə olunur, buna görə də JavaScript-də müntəzəm ifadə sintaksisinə xüsusi simvollar və onları işarələmək üçün qaçış ardıcıllığı daxildir. Məsələn, \s Unicode dəstindəki boşluqlara, nişanlara və istənilən boşluq simvollarına, \S isə Unicode dəstindəki boşluq olmayan simvollara uyğun gəlir.

Aşağıdakı cədvəldə bu xüsusi simvollar və simvol siniflərinin sintaksisi verilmişdir. (Qeyd edək ki, bəzi simvol sinifinin qaçış ardıcıllığı yalnız ASCII simvollarına uyğun gəlir və Unicode simvolları ilə işləmək üçün genişləndirilmir. Siz açıq şəkildə öz Unicode simvol siniflərinizi təyin edə bilərsiniz, məsələn /[\u0400-\u04FF]/ istənilən Kiril simvoluna uyğun gəlir. )

JavaScript müntəzəm ifadə xarakter sinifləri
Simvol Yazışmalar
[...] Mötərizədə olan hər hansı simvol
[^...] Mötərizədə olmayan hər hansı simvol
. Yeni sətir və ya digər Unicode sətir ayırıcıdan başqa hər hansı simvol
\w İstənilən ASCII mətn simvolu. Ekvivalent olaraq
\W ASCII mətn simvolu olmayan hər hansı simvol. [^a-zA-Z0-9_] ilə ekvivalent
\s Unicode dəstindən istənilən boşluq simvolu
\S Unicode simvol dəstindən istənilən boşluq olmayan simvol. Qeyd edək ki, \w və \S eyni deyil
\d İstənilən ASCII rəqəmləri. Ekvivalent olaraq
\D ASCII rəqəmlərindən başqa hər hansı simvol. [^0-9] ilə ekvivalent
[\b] backspace simvolu hərfi

Nəzərə alın ki, sinif xüsusi simvol qaçış ardıcıllığı kvadrat mötərizələrə daxil edilə bilər. \s istənilən boşluq simvoluna və \d istənilən rəqəmə uyğun gəlir, buna görə də /[\s\d]/ istənilən boşluq simvoluna və ya rəqəminə uyğun gəlir.

Təkrar

İndiyə qədər əldə edilmiş müntəzəm ifadə sintaksisi bilikləri ilə biz ikirəqəmli ədədi /\d\d/ və ya dördrəqəmli ədədi /\d\d\d\d/ kimi təsvir edə bilərik, lakin məsələn, bunu edə bilmərik. , istənilən sayda rəqəmdən ibarət rəqəmi və ya üç hərfdən ibarət sətirdən sonra isteğe bağlı rəqəmi təsvir edin. Bu daha mürəkkəb nümunələr verilmiş müntəzəm ifadə elementinin neçə dəfə təkrarlana biləcəyini müəyyən etmək üçün müntəzəm ifadə sintaksisindən istifadə edir.

Təkrarı bildirən simvollar həmişə tətbiq etdikləri nümunəyə uyğundur. Bəzi təkrarlar kifayət qədər tez-tez istifadə olunur və bu hallar üçün xüsusi simvollar var. Məsələn, + əvvəlki nümunənin bir və ya bir neçə nümunəsinə uyğun gəlir. Aşağıdakı cədvəl təkrar sintaksisinin xülasəsidir:

Aşağıdakı sətirlər bəzi nümunələri göstərir:

Varpattern = /\d(2,4)/; // İki-dörd rəqəmdən ibarət rəqəmə uyğundur model = /\w(3)\d?/; // Tam olaraq üç söz simvoluna və bir isteğe bağlı rəqəm nümunəsinə uyğun gəlir = /\s+java\s+/; // "Java" sözünü bir və ya daha çox boşluqla uyğunlaşdırır // ondan əvvəl və sonra model = /[^(]*/; // Açılan mötərizədən başqa sıfır və ya daha çox simvol uyğun gəlir

* və ? təkrar simvollarından istifadə edərkən diqqətli olun. Onlardan əvvəl bir nümunənin olmaması və buna görə də simvolların olmaması uyğunlaşa bilər. Məsələn, /a*/ nizamlı ifadəsi a simvolunu ehtiva etmədiyi üçün "bbbb" sətirinə uyğun gəlir.

Cədvəldə sadalanan təkrar simvolları təkrarların maksimum mümkün sayına uyğundur ki, bu da müntəzəm ifadənin sonrakı hissələrinin axtarışını təmin edir. Biz deyirik ki, bu, “xəsislik” təkrarıdır. Təkrarlamağı “xəsis olmayan” şəkildə həyata keçirmək də mümkündür. Təkrarın simvolundan (və ya simvollarından) sonra sual işarəsi qoymaq kifayətdir: ??, +?, *? və ya hətta (1,5)?

Məsələn, /a+/ müntəzəm ifadəsi a hərfinin bir və ya bir neçə nümunəsinə uyğun gəlir. "aaa" sətirinə tətbiq olunur, hər üç hərfə uyğun gəlir. Digər tərəfdən, /a+?/ a hərfinin bir və ya bir neçə təkrarına uyğun gəlir və mümkün olan ən az simvolu seçir. Eyni sətirə tətbiq edilən bu nümunə yalnız ilk a hərfinə uyğun gəlir.

“Təsissiz” təkrar həmişə gözlənilən nəticəni vermir. Bir və ya daha çox a-dan sonra b-yə uyğun gələn /a+b/ nümunəsini nəzərdən keçirək. "aaab" sətri üçün o, bütün sətirə uyğun gəlir.

İndi isə /a+?b/-nin “xəsis olmayan” versiyasını yoxlayaq. Düşünə bilər ki, o, a b-dən əvvəl yalnız bir a ilə uyğun olmalıdır. Eyni sətirə tətbiq edilsə, "aaab" tək a və sonuncu b ilə uyğunlaşacaq. Lakin, əslində, bütün simli, "acgöz" versiyada olduğu kimi, bu nümunəyə uyğun gəlir. Bunun səbəbi, müntəzəm ifadə nümunəsi axtarışının uyğunluğun mümkün olduğu sətirdə ilk mövqeyi tapmaqla həyata keçirilməsidir. Sətirin birinci simvolundan başlayaraq uyğunluq mümkün olduğundan, sonrakı simvollardan başlayan daha qısa uyğunluqlar belə nəzərə alınmır.

Alternativlər, qruplaşdırma və keçidlər

Normal ifadələrin qrammatikası alternativləri müəyyən etmək, alt ifadələri qruplaşdırmaq və əvvəlki alt ifadələrə istinad etmək üçün xüsusi simvolları ehtiva edir. Şaquli bar simvolu | alternativləri ayırmağa xidmət edir. Məsələn, /ab|cd|ef/ "ab" və ya "cd" sətri və ya "ef" sətri ilə uyğun gəlir və /\d(3)|(4)/ nümunəsi üç rəqəm və ya dörd kiçik hərflə uyğun gəlir məktublar.

Qeyd edək ki, alternativlər uyğunluq tapılana qədər soldan sağa işlənir. Sol alternativlə uyğunluq tapılarsa, "daha yaxşı" uyğunluq əldə oluna bilsə belə, düzgün alternativ nəzərə alınmır. Beləliklə, /a|ab/ "ab" sətrinə tətbiq edildikdə, o, yalnız birinci simvola uyğun olacaq.

Normal ifadələrdə mötərizələrin çoxlu mənası var. Onlardan biri fərdi elementləri bir alt ifadədə qruplaşdırmaqdır ki, elementlər xüsusi simvollardan istifadə edərkən |, *, +, ? və digərləri bir kimi qəbul edilir. Məsələn, /java(script)?/ nümunəsi "java" sözünə və ardınca əlavə olaraq "script" sözünə uyğun gəlir və /(ab|cd)+|ef)/ "ef" və ya bir və ya daha çox sətirlə uyğun gəlir. "ab" və ya "cd" sətirlərindən birinin təkrarları.

Normal ifadələrdə mötərizələrdən başqa bir istifadə nümunə daxilində alt nümunələri təyin etməkdir. Hədəf sətirində müntəzəm ifadə uyğunluğu aşkar edildikdə, hər hansı xüsusi mötərizəli alt modelə uyğun gələn hədəf sətirinin hissəsi çıxarıla bilər.

Tutaq ki, siz bir və ya bir neçə kiçik hərfdən sonra bir və ya daha çox rəqəm tapmaq istəyirsiniz. Bunun üçün /+\d+/ nümunəsindən istifadə edə bilərsiniz. Ancaq eyni zamanda fərz edək ki, biz yalnız hər matçın sonundakı rəqəmləri istəyirik. Nümunənin bu hissəsini mötərizədə (/+(\d+)/) yerləşdirsək, onda tapdığımız uyğunluqlardan rəqəmlər çıxara bilərik. Bunun necə edildiyi aşağıda təsvir olunacaq.

Bununla əlaqədar olaraq, eyni müntəzəm ifadənin əvvəlki hissəsindən olan alt ifadələrə istinad etmək üçün mötərizəli alt ifadələrin başqa bir istifadəsi var. Buna \ simvolundan sonra bir və ya bir neçə rəqəmin göstərilməsi ilə nail olunur. Rəqəmlər normal ifadə daxilində mötərizəli alt ifadənin mövqeyinə istinad edir. Məsələn, \1 birinci alt ifadəyə, \3 isə üçüncüyə aiddir. Qeyd edək ki, alt ifadələr iç-içə ola bilər, ona görə də saymada sol mötərizənin mövqeyi istifadə olunur. Məsələn, aşağıdakı müntəzəm ifadədə iç-içə alt ifadəyə (skript) istinad \2 kimi görünəcək:

/(ava(skript)?)\sis\s(əyləncə\w*)/

Əvvəlki alt ifadəyə istinad bu alt ifadənin şablonuna deyil, bu şablona uyğun gələn tapılmış mətnə ​​işarə edir. Buna görə də, istinadlar eyni simvolları ehtiva edən sətir hissələrini seçən bir məhdudiyyət qoymaq üçün istifadə edilə bilər. Məsələn, aşağıdakı müntəzəm ifadə tək və ya qoşa dırnaq içərisində sıfır və ya daha çox simvola uyğun gəlir. Bununla belə, açılış və bağlanış sitatlarının uyğun olmasını tələb etmir (yəni hər iki sitatın tək və ya ikiqat olması):

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

Biz bu istinadla uyğun sitat tələb edə bilərik:

Burada \1 ilk alt ifadə uyğunluğu ilə uyğun gəlir. Bu nümunədə, keçid bağlanış sitatının açılış sitatına uyğun olmasını tələb edən bir məhdudiyyət qoyur. Bu müntəzəm ifadə qoşa dırnaq içərisində tək dırnaqlara icazə vermir və əksinə.

Normal ifadədə elementləri həmin elementlərə nömrələnmiş istinad yaratmadan qruplaşdırmaq da mümkündür. Sadəcə elementləri (və) arasında qruplaşdırmaq əvəzinə, qrupu simvollarla başlayın (?: və simvolla bitirin). Məsələn, aşağıdakı nümunəni nəzərdən keçirin:

/(ava(?:script)?)\sis\s(əyləncə\w*)/

Burada alt ifadə (?:skript) yalnız qruplaşdırma üçün lazımdır ki, təkrar simvolu qrupa tətbiq olunsun. Bu dəyişdirilmiş mötərizələr keçid yaratmır, ona görə də bu müntəzəm ifadədəki \2 nümunəyə uyğun gələn mətnə ​​aiddir (əyləncəli\w*).

Aşağıdakı cədvəldə adi ifadələrdə alternativlərdən seçim, qruplaşdırma və istinad operatorları verilmişdir:

Adi ifadə simvolları alternativlər, qruplaşdırma və JavaScript keçidləri arasından seçim edir
Simvol Məna
| Alternativ. Soldakı alt ifadəyə və ya sağdakı alt ifadəyə uyğun gəlir.
(...) Qruplaşdırma. Elementləri *, +, ?, | ilə istifadə oluna bilən vahid obyektdə qruplaşdırır və s. Sonrakı keçidlərdə istifadə üçün bu qrupa uyğun gələn simvolları da xatırlayır.
(?:...) Yalnız qruplaşdırma. Elementləri birlikdə qruplaşdırır, lakin bu qrupa uyğun gələn simvolları xatırlamır.
\nömrə Qrup nömrəsi ilə uyğunlaşdırıldıqda tapılan eyni simvollara uyğun gəlir. Qruplar mötərizədə olan alt ifadələrdir (ehtimal ki, iç-içə). Qrup nömrələri sol mötərizələri soldan sağa saymaqla təyin edilir. (?:) simvolları ilə yaradılmış qruplar nömrələnmir.

Uyğun mövqenin təyin edilməsi

Daha əvvəl təsvir edildiyi kimi, nizamlı ifadənin bir çox elementi sətirdəki tək simvolla uyğun gəlir. Məsələn, \s bir boşluq simvoluna uyğun gəlir. Normal ifadələrin digər elementləri simvolların özləri deyil, simvollar arasındakı mövqelərə uyğun gəlir. Məsələn, \b söz sərhədinə uyğun gəlir - \w (ASCII mətn simvolu) və \W (mətn olmayan simvol) arasındakı sərhəd və ya ASCII mətn simvolu ilə xəttin əvvəli və ya sonu arasındakı sərhəd.

\b kimi elementlər uyğunlaşdırılmış sətirdə olması lazım olan hər hansı simvolu müəyyən etmir, lakin uyğunluq üçün etibarlı mövqeləri müəyyən edir. Bu elementlər bəzən nizamlı ifadə lövbər elementləri adlanır, çünki onlar nümunəni sətirdə müəyyən bir mövqeyə bağlayırlar. Digərlərinə nisbətən daha tez-tez ^ və $ kimi lövbər elementləri istifadə olunur ki, onlar müvafiq olaraq xəttin əvvəlinə və sonuna nümunələri bağlayır.

Məsələn, öz sətirindəki "JavaScript" sözü /^JavaScript$/ müntəzəm ifadəsi ilə uyğunlaşdırıla bilər. Tək bir "Java" sözünü tapmaq üçün (məsələn, "JavaScript" sözündəki prefiksdən çox) sözdən əvvəl və sonra boşluq tələb edən /\sJava\s/ nümunəsindən istifadə etməyə cəhd edə bilərsiniz.

Lakin bu həll iki problem yaradır. Birincisi, o, yalnız hər iki tərəfdən boşluqlarla əhatə olunmuş halda "Java" sözünü tapacaq və onu sətirin əvvəlində və ya sonunda tapmayacaq. İkincisi, bu nümunə uyğunlaşdıqda, onun qaytardığı sətirdə aparıcı və arxa boşluqlar olacaq, bu, bizim istədiyimiz kimi deyil. Beləliklə, \s boşluq simvollarına uyğun gələn model əvəzinə, \b söz sərhədlərinə uyğun gələn modeldən (və ya lövbərdən) istifadə edəcəyik. Aşağıdakı ifadə alınacaq: /\bJava\b/.

Anker elementi \B söz sərhədi olmayan mövqeyə uyğun gəlir. Yəni, /\Bcript/ nümunəsi "JavaScript" və "postscript" sözləri ilə uyğunlaşacaq və "script" və ya "Scripting" sözləri ilə uyğun gəlməyəcək.

İxtiyari müntəzəm ifadələr də lövbər şərtləri kimi çıxış edə bilər. Simvollar (?= və) arasında ifadənin qoyulması onu sonrakı simvollar üçün qabaqcadan baxış uyğunluğuna çevirir, həmin simvolların göstərilən nümunəyə uyğun olmasını tələb edir, lakin uyğunluq sətirinə daxil edilmir.

Məsələn, ümumi proqramlaşdırma dilinin adını və sonra iki nöqtə ilə uyğunlaşdırmaq üçün siz /ava(script)?(?=\:)/ ifadəsindən istifadə edə bilərsiniz. Bu nümunə "JavaScript: Müəyyən Bələdçi" sətirindəki "JavaScript" sözünə uyğun gəlir, lakin "Java in a Nutshell" sətirindəki "Java" sözünə uyğun gəlməyəcək, çünki ondan sonra iki nöqtə qoyulmur.

(?!) şərtini daxil etsəniz, bu, sonrakı simvollar üçün mənfi baxış testi olacaq və aşağıdakı simvolların göstərilən nümunəyə uyğun gəlməməsini tələb edəcək. Məsələn, nümunə /Java(?!Script)(\w) *)/ "Java" alt sətrinə, ardınca böyük hərf və istənilən sayda ASCII mətn simvoluna uyğun gəlir, bir şərtlə ki, "Java" alt sətri "Script" alt sətri ilə deyil, "JavaBeans" sətri ilə uyğun gəlir, lakin uyğun gəlmir "Javanese" sətri "JavaScrip" sətrinə uyğundur, lakin "JavaScript" və ya "JavaScripter" sətirlərinə uyğun gəlməyəcək.

Aşağıdakı cədvəldə normal ifadələrdəki lövbər simvolları verilmişdir:

Daimi İfadə Çapaları
Simvol Məna
^ Çoxsətirli axtarışda sətir ifadəsinin başlanğıcına və ya sətirin başlanğıcına uyğun gəlir.
$ Çoxsətirli axtarışda sətir ifadəsinin sonuna və ya sətir sonuna uyğun gəlir.
\b Söz sərhədinə uyğun gəlir, yəni. \w simvolu ilə \W simvolu və ya \w simvolu ilə sətirin əvvəli və ya sonu arasındakı mövqeyə uyğun gəlir. (Lakin qeyd edin ki, [\b] geri işarəsi ilə uyğun gəlir.)
\B Söz sərhədi olmayan mövqeyə uyğun gəlir.
(?=p) Sonrakı simvollar üçün pozitiv baxış yoxlayın. P nümunəsinə uyğun gələn sonrakı simvolları tələb edir, lakin tapılan sətirdə həmin simvolları daxil etmir.
(?!p) Sonrakı simvollar üçün mənfi baxış yoxlayın. Aşağıdakı simvolların p nümunəsinə uyğun gəlməməsini tələb edir.

Bayraqlar

Və müntəzəm ifadələrin qrammatikasının sonuncu elementi. Daimi ifadə bayraqları yüksək səviyyəli nümunə uyğunlaşdırma qaydalarını müəyyən edir. Qalan nizamlı ifadə qrammatikasından fərqli olaraq, bayraqlar slash simvolları arasında deyil, ikincisindən sonra müəyyən edilir. JavaScript dili üç bayrağı dəstəkləyir.

bayraq i nümunə axtarışının böyük hərflərə həssas olması lazım olduğunu müəyyən edir və g bayrağı- axtarış qlobal olmalıdır, yəni. sətirdəki bütün uyğunluqlar tapılmalıdır. bayraq mçoxsətir rejimində nümunə axtarışını həyata keçirir. Əgər axtarılan sətir ifadəsində yeni sətirlər varsa, onda bu rejimdə lövbər simvolları ^ və $ bütün sətir ifadəsinin əvvəlinə və sonuna uyğun olmaqla yanaşı, həm də hər mətn sətirinin əvvəlinə və sonuna uyğun gəlir. Məsələn, /java$/im nümunəsi həm "java"ya, həm də "Java\nis fun"a uyğun gəlir.

Bu bayraqlar istənilən kombinasiyada birləşdirilə bilər. Məsələn, "java" (yaxud "Java", "JAVA" və s.) sözünün hərf-həssas olmayan şəkildə ilk dəfə işlənməsini axtarmaq üçün /\bjava\b/ böyük hərflərə həssas olmayan müntəzəm ifadədən istifadə edə bilərsiniz. i. Və bu sözün sətirdə bütün təkrarlarını tapmaq üçün g: /\bjava\b/gi bayrağını əlavə edə bilərsiniz.

Nümunə uyğunluğu üçün string sinif üsulları

Bu nöqtəyə qədər biz yaradılan müntəzəm ifadələrin qrammatikasını müzakirə etdik, lakin bu müntəzəm ifadələrin əslində JavaScript skriptlərində necə istifadə oluna biləcəyinə baxmamışıq. Bu bölmədə biz String obyektində nümunə uyğunluğu, eləcə də axtarış və dəyişdirmə üçün müntəzəm ifadələrdən istifadə edən metodları müzakirə edəcəyik. Sonra RegExp obyektinə, onun metodlarına və xassələrinə baxaraq nizamlı ifadələrlə nümunə uyğunluğu haqqında danışmağa davam edəcəyik.

Sətirlər müntəzəm ifadələrdən istifadə edərək dörd metodu dəstəkləyir. Bunlardan ən sadəsi üsuldur axtar(). Arqument kimi müntəzəm ifadə qəbul edir və ya tapılan alt sətirin ilk simvolunun mövqeyini qaytarır, ya da uyğunluq tapılmadıqda -1-i qaytarır. Məsələn, aşağıdakı zəng 4 qaytaracaq:

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

Əgər search() metodu arqumenti müntəzəm ifadə deyilsə, o, əvvəlcə onu RegExp konstruktoruna ötürməklə çevrilir. Search() metodu qlobal axtarışları dəstəkləmir və öz arqumentində g bayrağına məhəl qoymur.

Metod əvəz() axtarış və dəyişdirmə əməliyyatını həyata keçirir. O, ilk arqumenti kimi müntəzəm ifadəni, ikincisi isə əvəzedici sətri götürür. Metod göstərilən nümunəyə uyğun gəlmək üçün çağırıldığı sətri axtarır.

Əgər müntəzəm ifadədə g bayrağı varsa, replace() metodu tapılan bütün uyğunluqları əvəzedici sətirlə əvəz edir. Əks halda, o, yalnız tapılan ilk uyğunluğu əvəz edir. Əgər replace() metodunun birinci arqumenti nizamlı ifadə deyil, sətirdirsə, o zaman metod onu search() kimi RegExp() konstruktorundan istifadə edərək müntəzəm ifadəyə çevirmək əvəzinə, sətir üçün hərfi axtarışı həyata keçirir. üsul edir.

Nümunə olaraq, bütün mətn sətri üçün "JavaScript" sözünü bərabər böyük hərflə yazmaq üçün əvəz () metodundan istifadə edə bilərik:

// Simvolların böyüklüyündən asılı olmayaraq, sözü istədiyiniz halda əvəz edirik var result = "javascript".replace(/JavaScript/ig, "JavaScript");

Replace() metodu bu nümunənin təklif etdiyindən daha güclüdür. Yada salaq ki, normal ifadədə mötərizəli alt ifadələr soldan sağa nömrələnir və müntəzəm ifadə alt ifadələrin hər birinə uyğun gələn mətni xatırlayır. Əvəzedici sətirdə $ işarəsi və ardınca ədəd varsa, replace() metodu həmin iki simvolu göstərilən alt ifadəyə uyğun gələn mətnlə əvəz edir. Bu çox faydalı xüsusiyyətdir. Biz ondan, məsələn, sətirdəki düz sitatları ASCII simvollarını təqlid edən tipoqrafik sitatlarla əvəz etmək üçün istifadə edə bilərik:

// Sitat sitatdır, ardınca istənilən sayda simvol // sitatlardan başqa (biz onları xatırlayırıq), bu simvollardan // sonra başqa sitat gəlir var quote = /"([^"]*)"/g; / / Düz sitatları tipoqrafik olanlarla əvəz edin və "$1"-i dəyişməz buraxın // $1-də saxlanılan sitat məzmunu var text = ""JavaScript" şərh olunan proqramlaşdırma dilidir."; var result = text.replace(quote, ""$1"") ; // "JavaScript" tərcümə edilmiş proqramlaşdırma dilidir.

Qeyd etmək lazımdır ki, əvəz etmək üçün ikinci arqument() dəyişdirmə sətrini dinamik hesablayan funksiya ola bilər.

Metod uyğun () müntəzəm ifadələrdən istifadə edən String sinif metodlarının ən ümumisidir. O, yeganə arqument kimi müntəzəm ifadəni qəbul edir (yaxud arqumentini RegExp() konstruktoruna ötürməklə onu müntəzəm ifadəyə çevirir) və axtarış nəticələrini ehtiva edən massivi qaytarır. Əgər g bayrağı normal ifadədə qoyulubsa, metod sətirdə mövcud olan bütün uyğunluqların massivini qaytarır. Misal üçün:

// ["1", "2", "3"] qaytarır var nəticə = "1 plus 2 bərabərdir 3".match(/\d+/g);

Normal ifadədə g bayrağı yoxdursa, match() metodu qlobal axtarış həyata keçirmir; yalnız ilk matçı axtarır. Bununla belə, match() metod qlobal axtarışı yerinə yetirmədikdə belə massivi qaytarır. Bu halda massivin birinci elementi tapılmış alt sətir, qalan bütün elementlər isə müntəzəm ifadənin alt ifadələridir. Buna görə də match() arr massivi qaytarırsa, o zaman arr tapılan bütün sətri, arr birinci alt ifadəyə uyğun gələn alt sətri ehtiva edəcək və s. Replace() metodu ilə paralel apararaq deyə bilərik ki, arr[n] $n məzmunu ilə doldurulur.

Məsələn, URL-i təhlil edən aşağıdakı koda nəzər salın:

Var url = /(\w+):\/\/([\w.]+)\/(\S*)/; var text = "Sitemizi ziyarət edin http://www..php"; var nəticə = mətn uyğunluğu (url); if (nəticə != null) ( var fullurl = nəticə; // "http://www..php" var protokol = nəticə; // "http" ehtiva edir var host = nəticə; // "www..php" ehtiva edir ")

Qeyd edək ki, g qlobal axtarış bayrağı təyin edilməyən müntəzəm ifadə üçün match() metodu adi ifadənin exec() metodu ilə eyni dəyəri qaytarır: qaytarılan massivin müzakirəsində təsvir olunduğu kimi indeks və daxiletmə xassələri var. aşağıda exec( ).

Normal ifadələrdən istifadə edən String obyektinin sonuncu üsuludur bölün (). Bu üsul, arqumentdən ayırıcı kimi istifadə edərək, çağırıldığı sətri alt sətirlər massivinə bölür. Misal üçün:

"123,456,789".split(","); // Qaytarır ["123","456","789"]

Split() metodu da arqument kimi müntəzəm ifadə qəbul edə bilər. Bu, metodu daha güclü edir. Məsələn, hər iki tərəfdə ixtiyari sayda boşluq simvoluna imkan verən ayırıcı təyin edə bilərsiniz:

"1, 2, 3 , 4 , 5".split(/\s*,\s*/); // Qaytarır ["1","2","3","4","5"]

Regexp obyekti

Qeyd edildiyi kimi, müntəzəm ifadələr RegExp obyektləri kimi təqdim olunur. RegExp() konstruktoruna əlavə olaraq, RegExp obyektləri üç metodu və bir neçə xassələri dəstəkləyir.

RegExp() konstruktoru bir və ya iki sətir arqumenti götürür və yeni RegExp obyekti yaradır. Konstruktor üçün ilk arqument nizamlı ifadənin gövdəsini ehtiva edən sətirdir, yəni. nizamlı ifadənin hərfində kəsik işarələri arasında görünməli olan mətn. Nəzərə alın ki, sətir literalları və müntəzəm ifadələr qaçış ardıcıllığını ifadə etmək üçün \ simvolundan istifadə edir, buna görə də RegExp() konstruktoruna sətir hərfi kimi müntəzəm ifadəni ötürərkən, hər \ simvolunu bir cüt \\ simvolu ilə əvəz etməlisiniz.

RegExp() üçün ikinci arqument itkin ola bilər. Müəyyən edilərsə, normal ifadə bayraqlarını təyin edir. Bu g, i, m simvollarından biri və ya bu simvolların kombinasiyası olmalıdır. Misal üçün:

// Sətirdəki bütün beş rəqəmli ədədləri tapır. Qeyd // bu misalda \\ simvollarının istifadəsi var zipcode = new RegExp("\\d(5)", "g");

RegExp() konstruktoru müntəzəm ifadə dinamik şəkildə yaradıldıqda faydalıdır və buna görə də müntəzəm ifadənin hərfi sintaksisi ilə təmsil oluna bilməz. Məsələn, istifadəçi tərəfindən daxil edilmiş sətri tapmaq üçün siz RegExp() funksiyasından istifadə edərək iş vaxtında müntəzəm ifadə yaratmalısınız.

Regexp xüsusiyyətləri

Hər bir RegExp obyekti beş xüsusiyyətə malikdir. Əmlak mənbə- müntəzəm ifadənin mətnini ehtiva edən yalnız oxunan sətir. Əmlak qlobal normal ifadədə g bayrağının mövcudluğunu təyin edən yalnız oxunan mantiq dəyəridir. Əmlak ignoreCase normal ifadədə i bayrağının olub-olmadığını təyin edən yalnız oxunan mantiqidir. Əmlak çoxsətirli normal ifadədə m bayrağının olub-olmadığını təyin edən yalnız oxunan mantiqidir. Və son əmlak sonuncu indeks oxumaq/yazmaq tam ədədidir. g bayrağı olan nümunələr üçün bu xassə növbəti axtarışın başlamalı olduğu sətirdəki mövqenin nömrəsini ehtiva edir. Aşağıda təsvir edildiyi kimi, exec() və test() metodları ilə istifadə olunur.

RegExp Metodları

RegExp obyektləri nümunə uyğunluğunu həyata keçirən iki metodu müəyyən edir; onlar yuxarıda təsvir edilən String sinif metodlarına oxşar davranırlar. Nümunə uyğunluğu üçün istifadə olunan RegExp sinifinin əsas üsuludur icra(). Bu, qeyd olunan String sinfinin match() metoduna bənzəyir, istisna olmaqla, bu, RegExp arqumentini qəbul edən String sinfinin metodu deyil, arqument kimi sətri götürən RegExp sinfinin metodudur.

exec() metodu müəyyən edilmiş sətir üçün müntəzəm ifadəni yerinə yetirir, yəni. sətirdə uyğunluq axtarır. Heç bir uyğunluq tapılmazsa, metod null qaytarır. Bununla belə, uyğunluq tapılarsa, g bayrağı olmadan axtarış üçün match() metodu ilə qaytarılan massivlə eyni massivi qaytarır. Massivin sıfır elementi müntəzəm ifadəyə uyğun gələn sətri ehtiva edir və bütün sonrakı elementlər bütün alt ifadələrə uyğun gələn alt sətirlərdir. Bundan əlavə, əmlak indeks müvafiq fraqmentin başladığı simvolun mövqe nömrəsini və xassəni ehtiva edir giriş axtarılan sətirə istinad edir.

match()-dan fərqli olaraq exec() metodu strukturu normal ifadədə g bayrağının mövcudluğundan asılı olmayan massivi qaytarır. Nəzərinizə çatdırım ki, qlobal normal ifadəni ötürərkən match() metodu tapılmış uyğunluqlar massivini qaytarır. Və exec() həmişə bir uyğunluğu qaytarır, lakin bu barədə tam məlumat verir. exec() g bayrağını ehtiva edən müntəzəm ifadədə çağırıldıqda, metod müntəzəm ifadə obyektinin lastIndex xassəsini uyğun gələn alt sətirdən dərhal sonra simvolun mövqe nömrəsinə təyin edir.

exec() metodu eyni normal ifadə üçün ikinci dəfə çağırıldıqda, lastIndex xassəsində göstərilən simvol mövqeyində axtarışa başlayır. Əgər exec() uyğunluq tapmazsa, lastIndex xassəsi 0-a təyin edilir. (Həmçinin, lastIndex-i istənilən vaxt sıfıra təyin edə bilərsiniz, axtarışın bir sətirdə sonuncu uyğunluğun tapılmasından əvvəl bitdiyi bütün hallarda bunu etməlisiniz. , və axtarış eyni RegExp obyekti ilə başqa sətirdə başlayır.) Bu xüsusi davranış sizə sətirdəki normal ifadənin bütün uyğunluqlarını təkrarlamaq üçün exec() funksiyasına təkrar zəng etməyə imkan verir. Misal üçün:

Varpattern = /Java/g; var text = "JavaScript Java-dan daha əyləncəlidir!"; varresult; while((nəticə = pattern.exec(mətn)) != null) ( console.log("Tapıldı"" + nəticə + """ + " mövqeyində " + nəticə.index + "; növbəti axtarış " +"dan başlayacaq model .lastIndex); )

RegExp obyektinin başqa bir üsulu - test(), bu exec() metodundan daha sadədir. O, sətir götürür və sətir normal ifadəyə uyğun gələrsə, doğru qaytarır:

Varpattern = /java/i; pattern.test("JavaScript"); // Həqiqəti qaytarın

test() çağırışı exec() funksiyasının qeyri-null dəyərini qaytardığı halda doğru qaytaran exec() çağırışına bərabərdir. Bu səbəbdən test() metodu qlobal normal ifadədə çağırılanda exec() metodu kimi davranır: lastIndex xassəsinin göstərdiyi mövqedə müəyyən edilmiş sətri axtarmağa başlayır və əgər uyğunluq tapırsa. , o, lastIndex xassəsini tapılan uyğunluqdan sonra birbaşa simvol mövqe nömrəsinə təyin edir. Buna görə də, test() metodundan istifadə edərək, exec() metodundan istifadə etdiyi kimi simli keçid dövrəsini də yarada bilərsiniz.

Son yeniləmə: 11.11.2015

Adi ifadələr sətri axtarmaq və ya dəyişdirmək üçün istifadə olunan nümunəni təmsil edir. JavaScript-də müntəzəm ifadələrlə işləmək üçün obyekt müəyyən edilir Regexp.

Normal ifadəni təyin etməyin iki yolu var:

Var myExp = /salam/; var myExp = new RegExp("salam");

Burada istifadə olunan müntəzəm ifadə olduqca sadədir: o, tək "salam" sözündən ibarətdir. Birinci halda ifadə iki əyri işarə arasında yerləşdirilir, ikinci halda isə ifadənin sətir kimi ötürüldüyü RegExp konstruktorundan istifadə edilir.

RegExp Metodları

Normal ifadənin sətirlə uyğun olub olmadığını müəyyən etmək üçün RegExp obyekti test() metodunu təyin edir. Bu üsul sətir normal ifadəyə uyğun gələrsə doğru, əks halda isə yalan qaytarır.

var initialText = "salam dünya!"; varexp = /salam/; var nəticə = exp.test(initialText); sənəd.yaz (nəticə + "
"); // true initialText = "gözəl hava"; nəticə = exp.test(initialText); document.write(nəticə); // false - ilkin mətn sətirində "salam" yoxdur

Exec metodu oxşar şəkildə işləyir - o, həmçinin sətirin adi ifadəyə uyğun olub-olmadığını yoxlayır, yalnız indi bu üsul sətirin ifadəyə uyğun olan hissəsini qaytarır. Heç bir uyğunluq yoxdursa, null qaytarılır.

var initialText = "salam dünya!"; varexp = /salam/; varresult = exp.exec(initialText); sənəd.yaz (nəticə + "
"); // salam başlanğıcText = "gözəl hava"; nəticə = exp.exec(initialText); document.write(nəticə); // null

Xarakter qrupları

Normal ifadə mütləq nizamlı sətirlərdən ibarət deyil, həm də müntəzəm ifadə sintaksisinin xüsusi elementlərini ehtiva edə bilər. Belə elementlərdən biri kvadrat mötərizədə alınmış simvollar qrupudur. Misal üçün:

Var initialText = "müdafiə"; var exp = /[abc]/; var nəticə = exp.test(initialText); sənəd.yaz (nəticə + "
"); // true initialText = "şəhər"; nəticə = exp.test(initialText); document.write(nəticə); // false

[abc] ifadəsi sətirdə üç hərfdən birinin olması lazım olduğunu göstərir.

Əgər sətirdə müəyyən diapazondan hərfi simvolların mövcudluğunu müəyyən etmək lazımdırsa, onda bu diapazonu bir dəfə təyin edə bilərik:

Var initialText = "müdafiə"; var exp = /[a-z]/; var nəticə = exp.test(initialText); sənəd.yaz (nəticə + "
"); // true initialText = "3di0789"; nəticə = exp.test(initialText); document.write(nəticə); // false

Bu halda, sətir a-z diapazonundan ən azı bir simvoldan ibarət olmalıdır.

Əksinə, sətirdə yalnız müəyyən simvolların olması zəruri deyilsə, simvolları sadalamazdan əvvəl ^ işarəsini kvadrat mötərizədə qoymaq lazımdır:

Var initialText = "müdafiə"; var exp = /[^a-z]/; var nəticə = exp.test(initialText); sənəd.yaz (nəticə + "
"); // false initialText = "3di0789"; exp = /[^0-9]/; nəticə = exp.test(initialText); document.write(nəticə); // doğru

Birinci halda, sətirdə yalnız a-z diapazonundan simvollar olmamalıdır, lakin "müdafiə" sətri yalnız bu diapazondakı simvollardan ibarət olduğundan, test () metodu yalanı qaytarır, yəni normal ifadə ilə uyğun gəlmir. simli.

İkinci halda ("3di0789") sətir yalnız ədədi simvollardan ibarət olmamalıdır. Lakin sətirdə hərflər də olduğu üçün sətir normal ifadəyə uyğun gəlir, ona görə də test metodu doğrunu qaytarır.

Lazım gələrsə, ifadə birləşmələrini toplaya bilərik:

Var initialText = "evdə"; var exp = /[dt]o[nm]/; var nəticə = exp.test(initialText); sənəd.yazmaq(nəticə); // doğru

[dt]o[nm] ifadəsi "ev", "səs", "don", "ton" alt sətirlərini ehtiva edə bilən sətirləri göstərir.

İfadə xassələri

    Qlobal xüsusiyyət müntəzəm ifadəyə uyğun gələn bütün alt sətirləri tapmağa imkan verir. Varsayılan olaraq, alt sətirləri axtararkən müntəzəm ifadə ifadəyə uyğun gələn sətirdə tapılan ilk alt sətiri seçir. Baxmayaraq ki, sətirdə ifadəyə uyğun gələn çoxlu alt sətirlər ola bilər. Bunun üçün bu xassə ifadələrdə g simvolu şəklində istifadə olunur

    ignoreCase xassəsi sətirdəki simvolların vəziyyətindən asılı olmayaraq müntəzəm ifadəyə uyğun gələn alt sətirləri tapmağa imkan verir. Bunun üçün müntəzəm ifadələrdə i simvolundan istifadə olunur.

    Çoxsətirli xüsusiyyət çoxsətirli mətndə müntəzəm ifadəyə uyğun gələn alt sətirləri tapmağa imkan verir. Bunun üçün müntəzəm ifadələrdə m simvolundan istifadə olunur.

Misal üçün:

Var initialText = "salam dünya"; var exp = /world/; var nəticə = exp.test(initialText); // yalan

Burada sətir və ifadə arasında uyğunluq yoxdur, çünki "Dünya" halda "dünya" ilə fərqlənir. Bu halda, ona ignoreCase xassəsini əlavə etməklə adi ifadəni dəyişdirməlisiniz:

Varexp = /dünya/i;

Yaxşı, biz də eyni anda bir neçə xüsusiyyətdən istifadə edə bilərik.