Apakah faedah ungkapan biasa Mari kita fahami dahulu:
Kami menggunakan kaedah memproses rentetan dalam js untuk menulis fungsi untuk mengekstrak nombor dalam rentetan:
var str='dgh6a567sdo23ujaloo932'; function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; }; console.log(getNumber(str)); //["6", "5", "6", "7", "2", "3", "9", "3", "2"]
Kami mengeluarkan nombor dalam rentetan dengan kaedah di atas, tetapi kami tidak berpuas hati dengan bentuk ['6','567','23','932'], dan mengubah fungsi. :
function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//现将相邻的数字连接起来 } else{ //每当连接的数字断开时,就在这执行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //这里的作用是为了显示最后数字的,原因不想解释 arr.push(temp); temp=''; } return arr; };
Kemudian kami menggunakan ungkapan biasa untuk menyelesaikan fungsi yang dilaksanakan oleh fungsi ini:
function getNumber2(obj){ var arr=[]; var re=/\d+/g; arr.push(obj.match(re)); return arr; };
Mari kita lihat sepenuhnya keputusan program yang dijalankan:
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; /*function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; };*/ function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//现将相邻的数字连接起来 } else{ //每当连接的数字断开时,就在这执行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //这里的作用是为了显示最后数字的,原因不想解释 arr.push(temp); temp=''; } return arr; }; function getNumber2(obj){ var arr=[]; var re=/\d+/g; arr.push(obj.match(re)); return arr; }; console.log(getNumber(str)); console.log(getNumber2(str)); }; </script> <body> </body> </html>
Kita boleh lihat daripada contoh di atas bahawa kaedah ungkapan biasa mempunyai kesan yang sama, tetapi kodnya lebih pendek dan lebih cekap Ini adalah faedah ungkapan biasa
Ungkapan biasa dicipta untuk memproses rentetan dengan lebih cekap Ia adalah sama seperti kaedah pemprosesan rentetan, tetapi lebih cekap dan ringkas (ungkapan biasa hanya boleh memproses rentetan)
Mari kita kaji secara sistematik beberapa kaedah biasa penyelarasan:
Sebelum ini, mari kita bincangkan tentang cara menulis ungkapan biasa adalah sama dengan tatasusunan objek lain(), objek(), Tarikh(), dsb., dan semuanya mempunyai kaedah permulaan
var re=/Anda perlu menulis perkara yang sepadan di sini. Jika anda tidak menulisnya, anda hanya akan menumpukan pada simbol/ //Ini adalah ciptaan mudah objek biasa saya akan menggunakannya secara langsung dalam artikel berikut
var re=new RegExp(); //Cara penciptaan ini juga mungkin, semua orang tahu, tetapi perbezaan dari singkatan adalah bahawa lulus parameter adalah sedikit berbeza
(1)ujian
Maksud: Padankan rentetan secara kerap, kembalikan benar apabila perlawanan berjaya, jika tidak, pulangkan palsu;
Sintaks: re.test(string);
Mari bercakap tentang watak melarikan diri dahulu:
/s space /S bukan ruang /d nombor /D bukan nombor /w aksara (huruf, nombor, garis bawah) /W bukan aksara
Contohnya: Tentukan sama ada rentetan ialah semua nombor
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; var str2='123456'; function allNumber(obj){ var re=/\D/;//定义正则对象匹配非数字,只要有不是数字的就是匹配结束返回结果 if (re.test(obj)) { alert('不全是数字'); } else{ alert('全是数字'); }; }; allNumber(str); allNumber(str2); }; </script> <body> </body> </html>
(2) carian
[color=Red]Nota: Ungkapan biasa adalah sensitif huruf besar-kecil secara lalai Untuk menjadikannya tidak sensitif huruf besar-besaran, tambahkan bendera i;[/color]
Contoh, padanan biasa tidak peka huruf besar-kecil bagi aksara tertentu
dalam rentetan
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr(obj){ var re=/B/i;//定义正则对象匹配b字符,不区分大小写 alert(obj.search(re)); }; searchStr(str); }; </script> <body> </body> </html>
Maksud: Memadankan rentetan secara kerap Apabila perlawanan berjaya, susunan perlawanan yang berjaya akan dikembalikan.
Sintaks: string.match(re);
Contoh: Padankan nombor berturut-turut dalam rentetan dan simpannya dalam tatasusunan (nombor berturut-turut digunakan sebagai item dalam tatasusunan)
" " dalam program bermakna perlawanan berlaku sekurang-kurangnya sekali. Mengapa kita melakukan ini?
Kami menyebut sebelum ini bahawa "lalai dalam ungkapan biasa ialah selagi perlawanan itu berjaya, ia akan tamat serta-merta dan mengembalikan nilai yang sepadan kemudiannya akan tamat apabila nombor dipadankan dalam rentetan, dan nombor akan dikembalikan." kepada tatasusunan Pada masa ini, apa yang kita perlukan ialah menggunakan g untuk menjadikannya sepadan dengan setiap elemen.
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr1(obj){ var re=/\d/; return obj.match(re); }; function searchStr2(obj){ var re=/\d/g; return obj.match(re); }; function searchStr3(obj){ var re=/\d\d/g;//全局匹配2位数 return obj.match(re); }; function searchStr4(obj){ var re=/\d+/g; return obj.match(re); }; console.log(searchStr1(str)); console.log(searchStr2(str)); console.log(searchStr3(str)); console.log(searchStr4(str)); }; </script> <body> </body> </html>
Maksud: Padankan rentetan secara kerap dan apabila rentetan yang berjaya dipadankan digantikan dengan rentetan baharu
Sintaks: string.replace(re);
<!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='daah6b5a7sdo23ujaloo932'; function replaceStr(obj){ var re=/a/g; //全局匹配a return obj.replace(re,'b'); }; console.log(replaceStr(str)); }; </script> <body> </body> </html>