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

資訊專欄INFORMATION COLUMN

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

idealcn / 2503人閱讀

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

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

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

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

正則表達式實例屬性及方法

三個修飾符屬性,只讀不可修改

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

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

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

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

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

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

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

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
返回正則表達式的字符串形式;即不包括首尾的/

兩個實例方法

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

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

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

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

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

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

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

RegExp.prototype.exec()
作用是返回一個數(shù)組,成員是匹配成功的字符串,否則返回null
但是數(shù)組的長度是組匹配數(shù)再加1,例如下面例子的,數(shù)組長度只有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

返回數(shù)組結(jié)果還有兩個屬性:
index:返回匹配時的位置
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文檔

幾個值得記憶的點:

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

就是用來捕獲自己想要的值,用來自己進行后續(xù)操作

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

match:匹配成功的字符串
$1:是第一個組匹配的值,例如后面多個括號則是$2$3...
注意組匹配嵌套時的順序console.log("bc".replace(/((b)c)/g,"$1+$2")); //bc+b從左開始,而不是從內(nèi)開始
字符串的match與split在進行組匹配時,是否添加修飾符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方法只要進行了g全局匹配就只會返回最終匹配到的字符串組成的數(shù)組;split只要進行了組匹配就會返回捕獲的內(nèi)容

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

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

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

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

后行否定斷言
(?表示,意思是匹配一個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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

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

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

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

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

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

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

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

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

    BoYang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<