成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js正則表達(dá)式的模式匹配

Kerr1Gan / 2004人閱讀

摘要:一正則表達(dá)式的定義正則表達(dá)式是一個(gè)描述字符模式的對(duì)象對(duì)象更多的是通過(guò)一種特殊的直接量語(yǔ)法來(lái)創(chuàng)建正則表達(dá)式的模式規(guī)則是由一個(gè)字符序列組成的包括所有字母和數(shù)字在內(nèi)大多數(shù)的字符都是按照直接量?jī)H描述待匹配字符的二直接量字符正則表達(dá)式中的所有字母和數(shù)

一.正則表達(dá)式的定義

1.正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對(duì)象.
2.RegExp對(duì)象更多的是通過(guò)一種特殊的直接量語(yǔ)法來(lái)創(chuàng)建.

var reg = /d/;

3.正則表達(dá)式的模式規(guī)則是由一個(gè)字符序列組成的,包括所有字母和數(shù)字在內(nèi),大多數(shù)的字符都是按照
直接量?jī)H描述待匹配字符的.

二.直接量字符

1.正則表達(dá)式中的所有字母和數(shù)字都是按照字面含義進(jìn)行匹配的,
也支持非字母的字符匹配,需要通過(guò)反斜杠()作為前綴進(jìn)行轉(zhuǎn)義.比如/n/用以匹配換行符.

var str = "abc12345";
// 直接量字符
var reg = /b/;
console.log(str.match(reg));    // ["b", 1]
三.字符類(lèi)

1.將直接量字符多帶帶放進(jìn)方括號(hào)內(nèi)就組成了字符類(lèi).
一個(gè)字符類(lèi)可以匹配它所包含的任意字符,/[abc]/就和字母"a","b","c"中的任意一個(gè)都匹配.
2.另外,可以通過(guò)^符號(hào)來(lái)定義否定字符類(lèi),它匹配所有不包含在方括號(hào)內(nèi)的字符.
3.字符類(lèi)可以使用連字符來(lái)表示字符范圍,/[a-z]/,[a-zA-Z0-9].
4.由于某些字符類(lèi)非常常用,因此在js的正則表達(dá)式語(yǔ)法中,使用了這些特殊字符的轉(zhuǎn)義字符來(lái)表示他們.
5.在方括號(hào)內(nèi)也可以寫(xiě)這些特殊轉(zhuǎn)義字符,/[sd]/就匹配任意空白符或者數(shù)字

// 字符類(lèi)
var reg = /[bc]/;
console.log(str.match(reg));    // ["b", 1]
var reg = /[^bc][^bc]/;
console.log(str.match(reg));
var reg = /d/g;
console.log(reg.test(str)); // true
console.log(str.match(reg)); // [1,2,3,4,5]

[...] 方括號(hào)內(nèi)的任意字符
1 不在方括號(hào)內(nèi)的任意字符
. 除換行符和其他Unicode行終止符之外的任意字符
w [a-zA-Z0-9]
W 2
s 任何Unicode空白符
S 任何非Unicode空白符的字符
d [0-9]
D 3

var reg = /s/g;
console.log(str.replace(reg, ""));
四.重復(fù)

1.這些正則表達(dá)式語(yǔ)法中較為復(fù)雜的模式都提到了正則表達(dá)式中某元素的"重復(fù)出現(xiàn)次數(shù)".
2.我們?cè)谡齽t模式之后跟隨用以指定字符重復(fù)的標(biāo)記.
3.在使用"*"和"?"時(shí)要注意,由于這些字符可能匹配0個(gè)字符,因此他們?cè)试S什么都不匹配.
{n,m} 匹配前一項(xiàng)至少n次,但不能超過(guò)m次
{n,} 匹配前一項(xiàng)n次或者更多次
{n} 匹配前一項(xiàng)n次
? 匹配前一項(xiàng)0次或多次,也即是說(shuō)前一項(xiàng)是可選的,等價(jià)于{0,1}

匹配前一項(xiàng)1次或多次,等價(jià)于{1,}

匹配前一項(xiàng)0次或多次,等價(jià)于{0,}

// 重復(fù)
var reg = /d{2}/;
console.log(str.match(reg));    // ["12"]

var reg = /d{2,}/;
console.log(str.match(reg));    // ["12345"]

var reg = /d{2,4}/;
console.log(str.match(reg));    // ["1234"]

//郵箱 [email protected]
var str = "[email protected]";
var reg = /w+@w+(.w+)+/;
console.log(str.match(reg));
四.非貪婪的重復(fù)

1.上面列出的匹配重復(fù)時(shí)盡可能多的匹配,而且允許后續(xù)的正則表達(dá)式繼續(xù)匹配,因此,我們稱之為"貪婪的匹配".
2.我們同樣可以使用正則表達(dá)式進(jìn)行非貪婪匹配,只需在待匹配的字符后跟隨一個(gè)問(wèn)號(hào)即可."??","+?","*?"或"{1,5}+".
3.比如,/a+/可以匹配一個(gè)或多個(gè)連續(xù)的字母a,當(dāng)使用"aaa"作為匹配字符串時(shí),正則表達(dá)式會(huì)匹配它的三個(gè)字符.
但是/a+?也可以匹配一個(gè)或多個(gè)連續(xù)字母a,但是它盡可能少的匹配.

// 非貪婪的匹配
var str = "aaab";
var reg1 = /a+/;
var reg2 = /a+?/;
console.log(str.match(reg1));   // ["aaa"]
console.log(str.match(reg2));   // ["a"]
五.選擇,分組和引用

1.正則表達(dá)式的語(yǔ)法還包括指定選擇項(xiàng),子表達(dá)式分組和引用前一子表達(dá)式的特殊字符.
字符"|"用于分隔供選擇的字符,例如/ab|cd|ef/可以匹配字符串"ab",也可以匹配字符串"cd","ef".
2.正則表達(dá)式中的圓括號(hào)有多種作用,一個(gè)作用是把多帶帶的項(xiàng)組合成子表達(dá)式,以便可以像處理一個(gè)獨(dú)立的
單元那樣用"|","*","+","?"等來(lái)對(duì)單元內(nèi)的項(xiàng)進(jìn)行處理.

// 分組,引用
var str = "javascript";
var reg1 = /java(script)?/;
console.log(str.match(reg1));   // ["javascript", "script"]

var str = "abc123";``
var reg = /w+(d+)/;
console.log(str.match(reg));    // ["abc123", "3"]
六.指定匹配位置

1.正則表達(dá)式中的多個(gè)元素才能匹配字符串的一個(gè)字符,例如s匹配的只是一個(gè)空白符,
還有一些正則表達(dá)式的元素匹配的是字符之間的位置,而不是實(shí)際的字符,例如b匹配一個(gè)單詞的邊界,即位于w和W之間的邊界.
2.像b這樣的元素不匹配某個(gè)可見(jiàn)的字符,它們指定匹配發(fā)生的合法位置.
有時(shí)我們稱這些元素為正則表達(dá)式的錨,因?yàn)樗麄儗⒛J蕉ㄎ辉谒阉髯址奶囟ㄎ恢蒙?
最常用的錨元素是^,它用來(lái)匹配字符串的開(kāi)始,錨元素$用以匹配字符串的結(jié)束.
^ 匹配字符串的開(kāi)頭,在多行檢索中,匹配一行的開(kāi)頭
$ 匹配字符串的結(jié)尾,在多行檢索中,匹配一行的結(jié)尾
b 匹配一個(gè)單詞的邊界,簡(jiǎn)言之,就是位于字符w和W之間的位置,或位于字符s和字符串的開(kāi)頭或結(jié)尾之間的位置
B 匹配非單詞邊界的位置

// 匹配非單詞邊界
var str1 = "javascript";
var str2 = "scripting";
var reg1 = /script/;
var reg2 = /Bscript/;
console.log(str1.match(reg1));  // null
console.log(str1.match(reg2));  // ["script"]
console.log(str2.match(reg1));  // ["script"]
console.log(str2.match(reg2));  // null
七.修飾符

1.正則表達(dá)式的修飾符,用以說(shuō)明高級(jí)匹配模式的規(guī)則.
"i"用以說(shuō)明模式匹配是不區(qū)分大小寫(xiě)的
"g"說(shuō)明模式匹配應(yīng)該是全局的,也就是說(shuō),應(yīng)該找出被檢索字符串中所有的匹配

// 修飾符
var str = "AAaa";
var reg = /a/;
console.log(str.match(reg));    // ["a"]
var reg = /a/g;
console.log(str.match(reg));    // ["a","a"]
var reg = /a/i;
console.log(str.match(reg));    // ["A"]
var reg = /a/gi;
console.log(str.match(reg));    // ["A", "A", "a", "a"]
用于模式匹配的String方法

String對(duì)象的一些用以執(zhí)行正則表達(dá)式模式匹配和檢索替換操作的方法

String.search

1.search(),他的參數(shù)是一個(gè)正則表達(dá)式,返回一個(gè)與之匹配的字串的起始位置,如果找不到匹配的字串,它將返回-1.

var str = "javascript123";
var reg = /script/i;
console.log(str.search(reg));   // 4
String.replace

1.replace()方法用以執(zhí)行檢索與替換操作,其中一個(gè)參數(shù)是一個(gè)正則表達(dá)式,第二個(gè)參數(shù)是要進(jìn)行替換的字符串.
如果正則表達(dá)式中設(shè)置了修飾符g,那么源字符串中所有模式匹配的字串都將替換成第二個(gè)參數(shù)指定的字符串,
如果不帶修飾符g,則只替換所匹配的第一個(gè)字串.
2.正則表達(dá)式中使用圓括號(hào)括起來(lái)的子表達(dá)式是帶有從左到右的索引編號(hào)的,而且正則表達(dá)式會(huì)記憶與每個(gè)子表達(dá)式匹配的文本.
如果在替換字符串中出現(xiàn)了$加數(shù)字,那么replace()將用與指定的子表達(dá)式相匹配的文本來(lái)替換這兩個(gè)字符.
3.replace()方法還有一些其他重要特性,第二個(gè)參數(shù)可以是函數(shù),該函數(shù)能夠動(dòng)態(tài)的計(jì)算替換字符串.

var reg = /j(ava)sc(ri)pt/g;
console.log(str.replace(reg, "$1"));    // "ava"
console.log(str.replace(reg, "$2"));    // "ri"
console.log(str);   // "javscript",原字符串保持不變,字符串永遠(yuǎn)不會(huì)變化,除非另外賦值.

var str2 = str.replace(reg, (a, b, c, d, e) => {
    console.log(a); // "javascript" 匹配字符串
    console.log(b); // "ava"    $1
    console.log(c); // "ri"     $2
    console.log(d); // 0    匹配位置
    console.log(e);
    return 1;  // 匹配結(jié)果
});
console.log(str2);  // 1
String.match

1.match()方法是最常用的String正則表達(dá)式方法.它的唯一參數(shù)就是一個(gè)正則表達(dá)式,返回的是一個(gè)由匹配結(jié)果組成的數(shù)組.
如果該正則表達(dá)式設(shè)置了修飾符g,則該方法返回的數(shù)組包含字符串中的所有匹配結(jié)果.

// match
var str = "javascriptjava";
var reg = /java/;
console.log(str.match(reg));   // ["java", 0]

var text = "Visit my blog at http://www.example.com/~david";
var url = /(w+)://([w.]+)/(S*)/;
var result = text.match(url);
console.log(result);
console.log(result.length); // 4
for (var i = 0; i < result.length; i++) {
    console.log(result[i]); // "http://www.example.com/~david",http,"www.example.com","~david"
}
String.split

split()用以將調(diào)用它的字符串拆分為一個(gè)子串組成的數(shù)組,使用的分隔符是split()參數(shù).
split()方法的參數(shù)可以是一個(gè)正則表達(dá)式,這使得split()方法異常強(qiáng)大.

// split
var str = "abcde";
console.log(str.split("c")); // ["ab", "de"]

// 可以指定分隔符,允許兩邊可以留有任意多的空白字符
var str = "1,  2,3, 4,    5";
console.log(str.split(/s*,s*/));  // [1, 2, 3, 4, 5]
RegEXP對(duì)象

RegExp對(duì)象定義了兩個(gè)用于執(zhí)行模式匹配操作的方法.
exec()方法與match()類(lèi)似,只是RegExp方法的參數(shù)是一個(gè)字符串,而String方法的參數(shù)是一個(gè)RegExp對(duì)象.
另外一個(gè)RegExp方法是test(),它的參數(shù)是一個(gè)字符串,用test()對(duì)某個(gè)字符串進(jìn)行檢測(cè),如果包含正則表達(dá)式的一個(gè)匹配結(jié)果,則返回true.

... ?

a-zA-Z0-9 ?

0-9 ?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84407.html

相關(guān)文章

  • 正則JS正則

    摘要:注意本文將正則與中的正則分開(kāi)討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過(guò)設(shè)置正則表達(dá)式后的修飾符可開(kāi)啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來(lái)源于語(yǔ)言書(shū)上那幾頁(yè)的介紹, 自己也沒(méi)有用過(guò)幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...

    firim 評(píng)論0 收藏0
  • JavaScript正則達(dá)式總結(jié)

    摘要:正則表達(dá)式一直是里比較難以掌握的點(diǎn)。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達(dá)式的字面量語(yǔ)法,表示正則表達(dá)式的模式,為正則表達(dá)式的標(biāo)志。字面量形式的正則表達(dá)式一般使用較多,也推薦大家盡可能使用這種形式,簡(jiǎn)潔易讀,符合正常的使用習(xí)慣。 正則表達(dá)式一直是js里比較難以掌握的點(diǎn)。 看不懂,學(xué)不會(huì),記不住。 每次需要用到正則的時(shí)候,都需要再去查找資料。 今天花時(shí)間把正則的知識(shí)點(diǎn)總結(jié)下,希望...

    big_cat 評(píng)論0 收藏0
  • JS基礎(chǔ)入門(mén)篇(三十三)—正則達(dá)式

    摘要:舉例一使用這個(gè)正則,打印結(jié)果為使用這個(gè)正則,打印結(jié)果為舉例二打印結(jié)果如下過(guò)濾標(biāo)簽?zāi)愫妹利惖纳虾O朕D(zhuǎn)化成你好,美麗的上海如果后面加,就會(huì)進(jìn)入非貪婪模式。如果后面不加,就會(huì)進(jìn)入貪婪模式,結(jié)果為上海。你好美麗的上海。 1.創(chuàng)建一個(gè)正則表達(dá)式 方法一:使用一個(gè)正則表達(dá)式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調(diào)用Re...

    caspar 評(píng)論0 收藏0
  • JS基礎(chǔ)入門(mén)篇(三十三)—正則達(dá)式

    摘要:舉例一使用這個(gè)正則,打印結(jié)果為使用這個(gè)正則,打印結(jié)果為舉例二打印結(jié)果如下過(guò)濾標(biāo)簽?zāi)愫妹利惖纳虾O朕D(zhuǎn)化成你好,美麗的上海如果后面加,就會(huì)進(jìn)入非貪婪模式。如果后面不加,就會(huì)進(jìn)入貪婪模式,結(jié)果為上海。你好美麗的上海。 1.創(chuàng)建一個(gè)正則表達(dá)式 方法一:使用一個(gè)正則表達(dá)式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調(diào)用Re...

    hot_pot_Leo 評(píng)論0 收藏0
  • JS基礎(chǔ)入門(mén)篇(三十三)—正則達(dá)式

    摘要:舉例一使用這個(gè)正則,打印結(jié)果為使用這個(gè)正則,打印結(jié)果為舉例二打印結(jié)果如下過(guò)濾標(biāo)簽?zāi)愫妹利惖纳虾O朕D(zhuǎn)化成你好,美麗的上海如果后面加,就會(huì)進(jìn)入非貪婪模式。如果后面不加,就會(huì)進(jìn)入貪婪模式,結(jié)果為上海。你好美麗的上海。 1.創(chuàng)建一個(gè)正則表達(dá)式 方法一:使用一個(gè)正則表達(dá)式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調(diào)用Re...

    y1chuan 評(píng)論0 收藏0
  • JS正則達(dá)式一條龍講解,從原理和語(yǔ)法到JS正則、ES6正則擴(kuò)展,最后再到正則實(shí)踐思路

    摘要:控制權(quán)和傳動(dòng)這兩個(gè)詞可能在搜一些博文或者資料的時(shí)候會(huì)遇到,這里做一個(gè)解釋先控制權(quán)是指哪一個(gè)正則子表達(dá)式可能為一個(gè)普通字符元字符或元字符序列組成在匹配字符串,那么控制權(quán)就在哪。 溫馨提示:文章很長(zhǎng)很長(zhǎng),保持耐心,必要時(shí)可以跳著看,當(dāng)然用來(lái)查也是不錯(cuò)的。 正則啊,就像一座燈塔,當(dāng)你在字符串的海洋不知所措的時(shí)候,總能給你一點(diǎn)思路;正則啊,就像一臺(tái)驗(yàn)鈔機(jī),在你不知道用戶提交的鈔票真假的時(shí)候,...

    Michael_Lin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<