Kata -kata sebelumnya
Sintaks dasar dari ekspresi reguler dalam JavaScript telah diperkenalkan sebelumnya. Kelas JavaScript RegExp mewakili ekspresi reguler. Baik string dan regexp mendefinisikan metode. Menggunakan ekspresi reguler dapat melakukan pencocokan pola yang kuat, pengambilan teks dan penggantian. Artikel ini akan memperkenalkan objek REGEXP dari ekspresi reguler, dan ekspresi reguler yang terlibat
Atribut dan metode
Obyek
Ekspresi reguler dalam JavaScript diwakili oleh objek RegExp, dan ada dua cara untuk menulisnya: satu adalah metode literal; Yang lainnya adalah metode konstruktor
Metode Penulisan Perl
Ekspresi Reguler Menulis literal, juga dikenal sebagai Penulis Perl, karena karakteristik ekspresi reguler JavaScript dipinjam dari Perl
Ekspresi reguler literal didefinisikan sebagai karakter yang terkandung di antara sepasang tebasan (/) dan 3 bendera dapat diatur
var ekspresi = /pola /flag;
Pola pencocokan ekspresi reguler mendukung 3 bendera berikut:
G: Berarti pola global, yaitu pola akan diterapkan pada semua string, daripada berhenti segera ketika pertandingan pertama ditemukan
I: Menunjukkan mode case-tidak sensitif, yaitu kasus pola dan string diabaikan saat menentukan kecocokan.
M: Merupakan pola multilin, yaitu, ketika akhir garis teks tercapai, ia akan terus mencari apakah ada item yang cocok dengan pola di baris berikutnya.
// Cocokkan semua contoh 'at' dari string var p =/at/g; // test () metode mengembalikan nilai boolean untuk menunjukkan apakah kecocokan dapat ditemukan console.log (p.test ('Ata')); // trueconsole.log (p.test ('aba'));/falseKonstruktor Regexp
Seperti objek bawaan biasa, objek ekspresi reguler RegExp juga mendukung bentuk konstruktor+regexp () baru.
Konstruktor RegExp menerima dua parameter: pola string agar cocok dan string bendera opsional (flags). Tiga bendera dari string bendera dan literal memiliki arti yang sama: 'g', 'i', 'm'
Kedua parameter konstruktor RegExp adalah string. Dan ekspresi apa pun yang didefinisikan menggunakan bentuk literal dapat menggunakan konstruktor
// Cocokkan semua contoh 'at' dari string var p1 =/at/g; // sama seperti di atas var p2 = regexp baru ('at', 'g');[Catatan] Spesifikasi ECMASCRIPS3 menetapkan bahwa kuantitas langsung ekspresi reguler akan dikonversi menjadi objek RegExp ketika dieksekusi ke sana. Setiap operasi ekspresi reguler kuantitas langsung yang diwakili oleh kode yang sama mengembalikan objek yang sama. Spesifikasi ecmascript5 membuat ketentuan yang berlawanan, dan ekspresi reguler yang diwakili oleh kode yang sama secara langsung dihitung setiap kali.
Semua operasi mengembalikan objek baru. IE6-8 selalu diimplementasikan sesuai dengan spesifikasi ecmascript5, jadi tidak ada masalah kompatibilitas
Karena literal ekspresi reguler tidak mendukung variabel, jika variabel muncul dalam ekspresi reguler, Anda hanya dapat menggunakan konstruktor RegExp untuk menyambungkan variabel ke dalam parameter konstruktor RegExp sebagai splicing string.
【Tips】 Dapatkan Elemen Melalui ClassName
fungsi getByclass (obj, className) {var elemen = obj.geteLementsbyTagname ('*'); var result = []; var pola = regexp baru ('(^| // s)' + className + '(// s | $)'); untuk (var i = 0; i <elemen.lements; i ++) {if (pola.test (elemen [i] .className)) {result.push (elemen [i]); }} return hasil;}Properti instan
Setiap objek instance RegExp berisi 5 properti berikut
Global: Nilai boolean menunjukkan apakah flag g Ignorecase: Nilai boolean menunjukkan apakah bendera I lastIndex: Integer menunjukkan posisi karakter mulai mencari pertandingan berikutnya. Itu dihitung dari 0 multiline: nilai boolean menunjukkan apakah flag msource: representasi string dari ekspresi reguler, yang kembali dalam bentuk literal daripada pola string yang dilewatkan dalam konstruktor
var pola = regexp baru ('// [bc //] at', 'i'); console.log (pola.global); // falseconsole.log (pola.ignorecase); // true console.log (pola.multiline); // falseconsole.log (pola.lastIndex); // 0console.log (pola.source); // '/[bc/] at'Jika Anda menggunakan fungsi EXEC () atau test () dari RegExp dan mengatur pola global 'G', pencocokan ekspresi reguler akan dimulai dari posisi LastIndex, dan LastIndex akan diatur ulang setelah setiap kecocokan di bawah berhasil. Dengan cara ini, Anda dapat berulang kali berulang kali di string dan menemukan setiap hasil yang cocok dalam urutan. Namun, jika Anda perlu memanggil metode REGEXP EXEC () atau Test () yang sama untuk string yang berbeda, variabel ini juga dapat membawa hasil pencocokan yang tidak terduga. Oleh karena itu, saat mengganti string, Anda harus secara eksplisit mengatur lastIndex dari RegExp ke 0
// Metode exec () Mengembalikan kecocokan dalam array var p = // w/g; var s = 'ab'; console.log (p.lastIndex); // 0console.log (p.exec (s)); // ['a'] console.log (p.lastIndex); // 1console.log ( p.exec (s)); // ['b'] console.log (p.LastIndex); // 2console.log (p.exec (s)); // nullconsole.log (p.LastIndex); // 0
var p = // w/g; var s1 = 'ab'; var s2 = 'ba'; console.log (p.LastIndex); // 0console.log (p.exec (s1)); // ['a'] console.log (p.lastindex); // 1console.log (p.exec (s2)); // ['a'] konsol.log (p.lastindex (s2)); // ['a'] konsol.log (p.lastindex (s2)); // ['a'] konsol.log (p.lastindex (s2));
Properti Konstruktor
Properti konstruktor RegExp dianggap sebagai sifat statis yang bervariasi berdasarkan operasi ekspresi reguler terbaru yang dilakukan.
Ada dua cara untuk mengaksesnya, yaitu nama atribut yang panjang dan nama atribut pendek. Kebanyakan nama atribut pendek bukan pengidentifikasi ecmascript yang valid, sehingga harus diakses melalui sintaks braket persegi.
Nama atribut panjang nama atribut pendek input $ _ string terakhir yang cocok dengan lastmatch $ & pertandingan terakhir lastparen $+ pertandingan terakhir pertandingan pertandingan terakhir menangkap leftcontext $ `input text sebelum lastMatch multiline $* Nilai Boolean yang menunjukkan apakah semua ekspresi menggunakan pola multiline RightContext $ 'The Text AfterMarch di Input String Input
Menggunakan properti ini, informasi yang lebih spesifik dapat diekstraksi dari operasi yang dilakukan dengan metode exec () atau metode test ()
// test () digunakan untuk menguji apakah suatu string cocok dengan ekspresi reguler dan mengembalikan nilai boolean var teks = 'Ini telah menjadi musim panas yang pendek'; var pola =/(.) Hort/g; if (pola.test (teks)) {console.log (regexp.input); // 'Ini adalah console.log (regexp.input./ console.log (regexp.rightcontext); // 'summer' console.log (regexp.lastmatch); // 'pendek' konsol.log (regexp.lastparen); // 'console.log (regexp.multiline); // false console.log' (REGEXP. console.log (regexp ['$ `']); // 'Ini telah menjadi' console.log (regexp ['$'"]); // 's summer' console.log (regexp ['$ &']); // 'console.log (regexp [' $+']); // console.log. }JavaScript memiliki 9 properti konstruktor untuk menyimpan grup penangkapan. Properti ini secara otomatis diisi saat memanggil metode exec () atau test ().
[Catatan] Secara teoritis, regexp. $ 0 yang harus disimpan ke seluruh teks pencocokan ekspresi tidak ada, nilainya tidak ditentukan
//Regexp.$1/regexp.$2/regexp.$3…to regexp. $ 9 digunakan untuk menyimpan grup penangkapan yang pertama, kedua, ini adalah musim panas yang pendek '; var pola =/(..) atau (.)/G; if (pola.test (teks)) {console.log.log console.log (regexp. $ 2); // t}Metode contoh
Ada 5 metode contoh objek RegExp, dibagi menjadi dua kategori. Termasuk tiga metode umum objek: tostring (), tolocalstring (), valueOf (), dan metode pencocokan rutin test () dan exec ()
Metode umum objek
Objek RegExp mewarisi tiga metode: tostring (), tolocalestring (), dan nilai () dari objek objek.
【Tostring ()】
metode tostring () mengembalikan literal dari ekspresi reguler
【Tolocalestring ()】
metode tolocalestring () mengembalikan literal dari ekspresi reguler
【Nilai ()】
Metode nilai () mengembalikan objek ekspresi reguler itu sendiri
[Catatan] Tidak peduli apa ekspresi reguler yang dibuat, ketiga metode ini hanya mengembalikan bentuk literal mereka
var pola = regexp baru ('[bc] at', 'gi'); console.log (pola.tostring ()); // '/[bc] at/gi'console.log (pola.tolocalestring ()); // '/[bc] at/gi'console.log (pola.valueof ()); ///[bc] at/givar pola =/[bc] at/gi; console.log (pola.tostring ()); // '/[bc] at/gi'console.log (pola.tolocalestring ()); // '[bc] at/gi'console.log (pola.valueof ()); ///[bc] at/giMetode pencocokan reguler
Hanya ada dua metode pencocokan reguler untuk objek RegExp: EXEC () dan test () masing -masing.
【Exec ()】
Metode exec () dirancang khusus untuk menangkap grup dan menerima parameter, yaitu string yang akan diterapkan oleh polanya. Kemudian kembalikan array yang berisi informasi pertandingan, dan kembalikan null jika tidak ada kecocokan.
Dalam array pertandingan, item pertama adalah string yang cocok dengan seluruh pola, dan item lainnya adalah string yang cocok dengan grup penangkapan dalam pola. Jika tidak ada kelompok penangkapan dalam pola, array hanya berisi satu
Array yang dikembalikan berisi dua properti tambahan: indeks dan input. Indeks berarti kecocokan berada pada posisi string, input berarti string di mana ekspresi reguler diterapkan
var text = 'mom and dad and baby and corau'; var pola =/mom (dan dad (dan baby)?)?/gi; var mencocokkan = pola.exec (teks); console.log (pola, cocok); // pola.LastIndex: 20 // cocok [0]: 'Mom and Dad and Baby' // cocok [1]: 'dan ayah dan ayah/bayi//baby/Baby/Baby (2]: 2/Baby: 2/Baby/Baby/Baby/Baby/Baby (1] dan Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby/Baby [1] Baby '// Matches.index: 0 // Matches.input:' Mom and Dad and Baby and Lainnya '
Untuk metode exec (), bahkan jika bendera global (g) diatur dalam pola, ia hanya akan mengembalikan satu pertandingan pada satu waktu. Tanpa mengatur bendera global, memanggil exec () beberapa kali pada string yang sama akan selalu mengembalikan informasi dari pertandingan pertama; Sementara ketika mengatur bendera global, setiap panggilan ke exec () akan terus mencari kecocokan baru di string.
var text = 'Cat, Bat, Sat, Fat'; var Pattern1 = /.at/;var cocok = pola1.exec (teks); console.log (pola1, cocok); // pola1.lastindex: 0 // cocok [0]: 'cat' // cocok. pola1.exec (teks); console.log (pola1, cocok); //pattern1.LastIndex:0//matches media0anjang:'cat'//matches.index:0//matches.input:'cat,bat,sat,fat '
var text = 'Cat, Bat, Sat, Fat'; Var Pattern2 = /.at/g ;var mencocokkan = pola2.exec (teks); console.log (pola2, cocok); //pattern2.lastindex:3//matchesht (0 0:'cat'//matches.index:0//matches.input:'cat,bat,sat,fat'var text = 'cat, bat, sat, fat'; materi = pola2.exec (teks); konsol.log (pola2, matches); //pattern2.lastindex:7//matchesht (0 ('bat'//matches.index:4//matches.input:'cat,bat,sat,fat '【Tips】 Gunakan metode exec () untuk menemukan semua posisi yang cocok dan semua nilai
var string = 'j1h342jg24g234j 3g24j1';var pattern = //d/g;var valueArray = [];//value var indexArray = [];//position var temp;while((temp=pattern.exec(string)) != null){ valueArray.push(temp[0]); indexArray.push (temp.index); } // ["1", "3", "4", "2", "2", "4", "2", "3", "4", "3", "2", "4", "1"] [1, 3, 4, 5, 8, 9, 11, 12, 13, 18, 18, 19, 21] konsol (ValueRr, ValueRR, Indeks,【tes()】
Metode test () digunakan untuk menguji apakah ekspresi reguler dapat menemukan teks yang cocok dalam string, menerima parameter string, dan mengembalikan true saat mencocokkan, jika tidak mengembalikan false
var text = '000-00-000'; var pola = // d {3}-/d {2}-/d {4}/; if (pola.test (text)) {console.log ('Polanya cocok');}Demikian pula, ketika metode test () dipanggil, properti LastIndex dari objek RegExp akan diubah. Jika pola global ditentukan, setiap kali metode test () dieksekusi, nilai offset lastIndex dalam string akan dicoba untuk dicocokkan. Oleh karena itu, string yang berbeda diverifikasi beberapa kali dengan regexp yang sama. Nilai LastIndex harus diatur ke 0 setelah setiap panggilan.
var Pattern = /^/d{4}-/d{2}-/d{2}/g;console.log(pattern.test('2016-06-23');//trueconsole.log(pattern.test('2016-06-03-));//false//test('2016-06 rese 0 /^/d{4}-/d{2}-/d{2}/g;console.log(pattern.test('2016-06-23');//truepattern.lastindex = 0; console.log (pola.test ('2016-06-23')); // truepattern.last ('2016-06-06')))); // truePattern.last ('2016-06-06')))); 0; console.log (pola.test ('2016-06-23')); // truepattern.lastIndex = 0; console.log (pola.test ('2016-06-23')); // trueSeperti disebutkan sebelumnya, JavaScript memiliki 9 properti konstruktor untuk menyimpan grup penangkapan. Properti ini akan diisi secara otomatis saat memanggil metode exec () atau test ().
[Catatan] Secara teoritis, regexp. $ 0 yang harus disimpan ke seluruh teks pencocokan ekspresi tidak ada, nilainya tidak ditentukan
if (/^(/d {4})-(/d {2})-(/d {2}) $/. test ('2016-06-23')) {console.log (Regexp. $ 1); // '2016' Console.log (Regexp. $ 2); // '06' console.log (Regexp. $ 2); // '06' cuplic.log.log. console.log (regexp. $ 0); // tidak ditentukan}Di atas adalah tipe JavaScript System_Regex RegExp Jenis Penjelasan Detail dari Detail. Saya harap semua orang mendukung wulin.com ~