国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript學(xué)習(xí)之正則表達(dá)式

idealcn / 2485人閱讀

摘要:正則表達(dá)式如何創(chuàng)建正則表達(dá)式字面量創(chuàng)建通過(guò)構(gòu)造函數(shù)正則表達(dá)式實(shí)例屬性及方法三個(gè)修飾符屬性,只讀不可修改正則表達(dá)式是否添加了忽略大小寫的修飾符,返回一個(gè)布爾值正則表達(dá)式是否添加了全局匹配的修飾符,返回一個(gè)布爾值正則表達(dá)式是否添加了換行的修飾符

正則表達(dá)式 如何創(chuàng)建正則表達(dá)式

字面量創(chuàng)建var r = /a/;

通過(guò)構(gòu)造函數(shù)var r = new RegExp("a");

正則表達(dá)式實(shí)例屬性及方法

三個(gè)修飾符屬性,只讀不可修改

RegExp.prototype.ignoreCase
正則表達(dá)式是否添加了忽略大小寫的修飾符,返回一個(gè)布爾值

var r = /asd/i;
console.log(r.ignoreCase);    //true

RegExp.prototype.global
正則表達(dá)式是否添加了全局匹配的修飾符,返回一個(gè)布爾值

var r = /asd/i;
console.log(r.global);    //true    

RegExp.prototype.multiline
正則表達(dá)式是否添加了換行的修飾符,返回一個(gè)布爾值

var r = /asd/m;    
console.log(r.multiline);    //true    

RegExp.prototype.lastIndex
返回一個(gè)整數(shù),表示正則表達(dá)式下一次開(kāi)始匹配的位置,

var s = "wqerqt";
var r = /q/g;
console.log(r.lastIndex);   //0
console.log(r.test(s));     //true
console.log(r.lastIndex);   //2
console.log(r.test(s));     //true

RegExp.prototype.source
返回正則表達(dá)式的字符串形式;即不包括首尾的/

兩個(gè)實(shí)例方法

RegExp.prototype.test()
作用是否能匹配參數(shù)字符串,返回一個(gè)布爾值

console.log(/as/.test("fdas"));   //true
console.log(/as/.test("fd"));   //false

test()方法在全局g的匹配下,會(huì)記錄上一次test()后開(kāi)始的位置,來(lái)進(jìn)行下一次test();
可以這么來(lái)理解lastIndex用來(lái)指定test()開(kāi)始的位置,lastIndex只對(duì)同一個(gè)正則表達(dá)式有連續(xù)有效的作用,例如重新創(chuàng)建正則表達(dá)式,會(huì)一直返回true或者false

var i = 3,
    r = /as/g;
while(i) {
    console.log(r.test("asd"));
    i --;
}                          //true false true

下面三種結(jié)果相同都是true,相當(dāng)于新的正則表達(dá)式在匹配字符串,只是正則表達(dá)式是一樣的

var i = 3,
while(i) {
    //r = new RegExp("as","g");
    //r = /as/g;    
    console.log(/as/g.test("asd"));
    i --;
}                          //true true true

所以個(gè)人認(rèn)為在外部定義正則表達(dá)式,內(nèi)部引用會(huì)好點(diǎn)

RegExp.prototype.exec()
作用是返回一個(gè)數(shù)組,成員是匹配成功的字符串,否則返回null
但是數(shù)組的長(zhǎng)度是組匹配數(shù)再加1,例如下面例子的,數(shù)組長(zhǎng)度只有1

var r = /as/g;
console.log(r.exec("asdas"));   //["as", index: 0, input: "asdas", groups: undefined]
console.log(r.exec("asdas"));   //["as", index: 3, input: "asdas", groups: undefined]
console.log(r.exec("adsd"));    //null

返回?cái)?shù)組結(jié)果還有兩個(gè)屬性:
index:返回匹配時(shí)的位置
input:返回參數(shù)字符串

var r = /as/g;
var arr = r.exec("asdas");
console.log(arr.index, arr.input);     //0,"asdas"
var arr1 = r.exec("asdas");
console.logarr1.index, arr1.input);   //3,"asdas"    

匹配規(guī)則

詳情可看MDN文檔

幾個(gè)值得記憶的點(diǎn):

(.):任意字符,除了
u2028u2029的所有單個(gè)字符,大于u0xFFFF的兩個(gè)字符也不行
[sS]與[^]:所有單個(gè)字符,包括換行符
oo:不存在這樣的單詞進(jìn)行匹配
+:{1,+Infinity},取盡可能大,+?則是取盡可能小,最小為1
*:{0,+Infinity},取盡可能大,*?則是取盡可能小,最小為0
?:{0,1},取盡可能大,最大為1,??則是取盡可能小,最小為0
[xyz]:單個(gè)字符是x或y或z;而[^xyz],則是除了xyz的單個(gè)字符
組匹配

就是用來(lái)捕獲自己想要的值,用來(lái)自己進(jìn)行后續(xù)操作

var a = /-(w)/g;
console.log("get-own-property-name".replace(a,function (match, $1) {
    return $1.toUpperCase();
}));                     //getOwnPropertyName

match:匹配成功的字符串
$1:是第一個(gè)組匹配的值,例如后面多個(gè)括號(hào)則是$2$3...
注意組匹配嵌套時(shí)的順序console.log("bc".replace(/((b)c)/g,"$1+$2")); //bc+b從左開(kāi)始,而不是從內(nèi)開(kāi)始
字符串的match與split在進(jìn)行組匹配時(shí),是否添加修飾符g結(jié)果不一樣

console.log("abc".match(/(.)b/g));   //["ab"]
console.log("abc".match(/(.)b/));    //(2)?["ab", "a", index: 0, input: "abc", groups: undefined]
console.log("abc".split(/(b)/));     //?["a", "b", "c"]
console.log("abc".split(/b/));       //["a", "c"]

總結(jié):match方法只要進(jìn)行了g全局匹配就只會(huì)返回最終匹配到的字符串組成的數(shù)組;split只要進(jìn)行了組匹配就會(huì)返回捕獲的內(nèi)容

非捕獲組
?:表示;說(shuō)直白點(diǎn)就是:還是這么匹配但是我不返回括號(hào)里的內(nèi)容,所以我們進(jìn)行split的組匹配時(shí)可以進(jìn)行修改console.log("abc".split(/(?:b)/)); //["a", "c"]

先行斷言
x(?=y)表示,意思是匹配一個(gè)x,x必須在y前面,結(jié)果中不返回y

先行否定斷言
x(?!y)表示,意思是匹配一個(gè)x,x后面不能是y,結(jié)果中不返回y

后行斷言
(?<=y)x表示,意思是匹配一個(gè)x,x前面必須是y,結(jié)果中不返回y

后行否定斷言
(?表示,意思是匹配一個(gè)x,x前面不能是y,結(jié)果中不返回y

console.log(/(?

經(jīng)典例子:

數(shù)字格式化:

var r = /B(?=((d{3})+$))/g;
console.log("1234567890".replace(r, "."));    //1.234.567.890
console.log("123".replace(r, "."));           //123

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98313.html

相關(guān)文章

  • JavaScript學(xué)習(xí)之JSON對(duì)象

    摘要:原始類型的值只有四種字符串?dāng)?shù)值必須以十進(jìn)制表示布爾值和不能使用和。字符串必須使用雙引號(hào)表示,不能使用單引號(hào)。數(shù)組或?qū)ο笞詈笠粋€(gè)成員的后面,不能加逗號(hào)。 JSON對(duì)象 補(bǔ)充記錄一下,有些方法很需要熟練記憶的 JSON對(duì)象的規(guī)定 JSON對(duì)象對(duì)值有嚴(yán)格的規(guī)定 復(fù)合類型的值只能是數(shù)組或?qū)ο螅荒苁呛瘮?shù)、正則表達(dá)式對(duì)象、日期對(duì)象。原始類型的值只有四種:字符串、數(shù)值(必須以十進(jìn)制表示)、布爾值和...

    banana_pi 評(píng)論0 收藏0
  • Vim入門學(xué)習(xí)之二(cheat sheet)

    摘要:有種東西學(xué)了記不住,是正則表達(dá)式,就是了。最近在用寫個(gè),我一個(gè)按鍵盤的,又沒(méi)什么太多的閑錢去購(gòu)買高大上的,不得已開(kāi)始用上了學(xué)的好多遍都沒(méi)學(xué)會(huì)的。 有10種東西學(xué)了記不住,00是正則表達(dá)式,10就是Vim了。 最近在用python寫個(gè)side project,我一個(gè)按鍵盤的,又沒(méi)什么太多的閑錢去購(gòu)買高大上的IDE,不得已開(kāi)始用上了學(xué)的好多遍都沒(méi)學(xué)會(huì)的Vim。Vim有多牛X,隨便問(wèn)一個(gè)代碼...

    Shimmer 評(píng)論0 收藏0
  • Vim入門學(xué)習(xí)之二(cheat sheet)

    摘要:有種東西學(xué)了記不住,是正則表達(dá)式,就是了。最近在用寫個(gè),我一個(gè)按鍵盤的,又沒(méi)什么太多的閑錢去購(gòu)買高大上的,不得已開(kāi)始用上了學(xué)的好多遍都沒(méi)學(xué)會(huì)的。 有10種東西學(xué)了記不住,00是正則表達(dá)式,10就是Vim了。 最近在用python寫個(gè)side project,我一個(gè)按鍵盤的,又沒(méi)什么太多的閑錢去購(gòu)買高大上的IDE,不得已開(kāi)始用上了學(xué)的好多遍都沒(méi)學(xué)會(huì)的Vim。Vim有多牛X,隨便問(wèn)一個(gè)代碼...

    muzhuyu 評(píng)論0 收藏0
  • nginx學(xué)習(xí)之——location

    摘要:需要注意的是,當(dāng)普通匹配的結(jié)果是嚴(yán)格精確的,則停止匹配返回結(jié)果。文字說(shuō)明進(jìn)行精準(zhǔn)匹配,檢查是否在精準(zhǔn)匹配模式下,匹配成功,若成功則停止檢查。判斷是否可以進(jìn)行正則匹配,如果存在符號(hào)的段表示不進(jìn)行正則匹配,立即返回結(jié)果。 Location 匹配模式 一、語(yǔ)法 location [=|~|~*|^~] uri{ root /var/www/html index index.h...

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

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

0條評(píng)論

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