摘要:正則表達(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
摘要:原始類型的值只有四種字符串?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)制表示)、布爾值和...
摘要:有種東西學(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è)代碼...
摘要:有種東西學(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è)代碼...
摘要:需要注意的是,當(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...
閱讀 2750·2021-10-26 09:50
閱讀 2391·2021-10-11 11:08
閱讀 2132·2019-08-30 15:53
閱讀 1910·2019-08-30 15:44
閱讀 2386·2019-08-28 18:12
閱讀 2525·2019-08-26 13:59
閱讀 2858·2019-08-26 12:19
閱讀 2757·2019-08-26 12:09