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

資訊專欄INFORMATION COLUMN

JavaScript學習之正則表達式

idealcn / 2488人閱讀

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

正則表達式 如何創建正則表達式

字面量創建var r = /a/;

通過構造函數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
返回一個整數,表示正則表達式下一次開始匹配的位置,

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()
作用是否能匹配參數字符串,返回一個布爾值

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

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

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

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

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

所以個人認為在外部定義正則表達式,內部引用會好點

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

返回數組結果還有兩個屬性:
index:返回匹配時的位置
input:返回參數字符串

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"    

匹配規則

詳情可看MDN文檔

幾個值得記憶的點:

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

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

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從左開始,而不是從內開始
字符串的match與split在進行組匹配時,是否添加修飾符g結果不一樣

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"]

總結:match方法只要進行了g全局匹配就只會返回最終匹配到的字符串組成的數組;split只要進行了組匹配就會返回捕獲的內容

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

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

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

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

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

console.log(/(?

經典例子:

數字格式化:

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98313.html

相關文章

  • JavaScript習之JSON對象

    摘要:原始類型的值只有四種字符串數值必須以十進制表示布爾值和不能使用和。字符串必須使用雙引號表示,不能使用單引號。數組或對象最后一個成員的后面,不能加逗號。 JSON對象 補充記錄一下,有些方法很需要熟練記憶的 JSON對象的規定 JSON對象對值有嚴格的規定 復合類型的值只能是數組或對象,不能是函數、正則表達式對象、日期對象。原始類型的值只有四種:字符串、數值(必須以十進制表示)、布爾值和...

    banana_pi 評論0 收藏0
  • Vim入門習之二(cheat sheet)

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

    Shimmer 評論0 收藏0
  • Vim入門習之二(cheat sheet)

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

    muzhuyu 評論0 收藏0
  • nginx習之——location

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

    BoYang 評論0 收藏0

發表評論

0條評論

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