180328 正則表達式

什麼是正則表達式

檢索文本時,可以對字符串內容進行模式匹配。RegExp 就是這種模式。用RegExp對象表示正則表達式。


創建正則表達式

  • 直接量定義
/pattern/attributes
var regExp = /abc/;

//可以添加修飾符,可以同時使用

/abc/g  全局匹配,查找所有匹配
/abc/i  大小寫不敏感
/abc/m  執行多行匹配
  • 構造函數創建對象
new RegExp(pattern, attributes);
var regExp = new RegExp('abc','gi');

var regExp1 = new RegExp(regExp); 
//通過new創建的對象和參照對象是兩個不同的對象,可以通過給一個對象增加屬性驗證。
//如果 pattern 是正則表達式,而不是字符串,則必須省略修飾符參數。

var regExp2 = RegExp(regExp);
//不使用new關鍵字,新創建對象和原對象是同一個。
  • 區別
var regExp = /\w/g;   // \w 中包含下劃線

var regExp1 = new RegExp('\\w','gi'); // 在字符串中會轉義

返回值

如果參數 pattern 是正則表達式而不是字符串,創建一個新的 RegExp 對象,模式與標誌與指定、參照的對象相同。

如果不用 new 運算符,則 RegExp() 作爲函數調用,那麼它的行爲與用 new 運算符調用時一樣,只是當 pattern 是正則表達式時,它只返回 pattern


RegExp對象的方法

1:RegExp.test() : 檢索字符串中的指定值。返回值是 true 或 false。

var patt1=new RegExp("e");

document.write(patt1.test("The best things in life are free")); 

// true

2:RegExp.exec() : 檢索字符串中的指定值。返回值是數組。如果沒有發現匹配,則返回 null。

var patt1=new RegExp("e");

document.write(patt1.exec("The best things in life are free")); 

// e

如果需要找到所有某個字符的所有存在,可以使用 “g” 參數,exec() 的工作原理如下:

  • 找到第一個 “e”,並存儲其位置 [ lastIndex ]
  • 如果再次運行 exec(),則從存儲的位置開始檢索,並找到下一個 “e”,並存儲其位置
var patt1=new RegExp("e","g");
do
{
result=patt1.exec("The best things in life are free");
document.write(result);
}
while (result!=null) 

// eeeeeenull  每次循環落下一個結果
var str = "Hello World! Hello W3School!";
        var patt1 = /\w+/g;
        do {
            result = patt1.exec(str);
            console.log(result);
        } while (result != null)

這裏寫圖片描述

var str = "Hello World! Hello W3School!";
        var patt1 = /\w+?/g;
        do {
            result = patt1.exec(str);
            console.log(result);
        } while (result != null)

這裏寫圖片描述

string.match(regExp) : 返回數組
string.replace():將正則表達式匹配出的字符替換成目標字符

var regExp = /bb/gm;
var str = 'aabbbcc';
str.replace(regExp,'cc');  

-----------------------------------------------
var regExp = /(\w{4})(\w{4})/gm;   玩子表達式:反向引用
var str = 'aaaabbbb';
str.replace(regExp,'$2$1');     替換子表達式位置

str.replace(regExp,function($,$1,$2){
    return $2 + $1;
})
-----------------------------------------------
var regExp = /(\w{4})(\w{4})/gm;
var str = 'aaaabbbbd';
str.replace(regExp,function(){
    return 'c'
})                            //cd

-----------------------------------------------
var regExp = /-(\w)/g;
var str = 'your-first-name';
str.replace(regExp,function($,$1){
    return $1.toUpperCase();
})
-----------------------------------------------
str = 'aaaabbbbccccdddd';
var regExp = /((\w{4})(\w{4}))/g;     [aaaabbbb,ccccdddd]
var regExp = /^((\w{4})(\w{4}))/g;    [aaaabbbb] 以其開頭

-----------------------------------------------
有幾個括號就有幾個子表達式。

regExp = /(?:()())/g;    忽略掉外層表達式
-----------------------------------------------
str = aabb;
regExp = /((\w{2})(\w{2})\1\2)/g;
子表達式1:aabb
2:aa
3:bb
aabb[前面匹配的結果]aabb[\1]aa[\2]
str = 'aaaabbbbccccdddd';
var regExp = /((\w{4})(\w{4}))/g;
regExp.exec(str);
第一位匹配元素,子表達式1,字表達式2
str = '100000000000'
var regExp = /(?=(\d{3})+$)/g;
str.replace(regExp,'.');

這裏寫圖片描述


這裏寫圖片描述

這裏寫圖片描述

  • ( . )
    這裏寫圖片描述
  • (\w)
    單詞字符包括:a-z、A-Z、0-9,以及下劃線。不包含漢字。
    這裏寫圖片描述
  • (\W)
    這裏寫圖片描述
  • (\s)
    空白字符可以是:
    空格符 (space character)
    製表符 (tab character)
    回車符 (carriage return character)
    換行符 (new line character)
    垂直換行符 (vertical tab character)
    換頁符 (form feed character)
    這裏寫圖片描述
  • (\b)
    通常用於查找位於單詞的開頭或結尾的匹配
    匹配的單詞邊界的長度爲零。(不要與 [\b] 混淆。)
    這裏寫圖片描述
/\bm/ 匹配 "moon" 中的 'm'/oo\b/ 不匹配 "moon" 中的 'oo',因爲 'oo' 後面的 'n' 是一個單詞字符;

/oon\b/ 匹配 "moon" 中的 'oon',因爲 'oon' 位於字符串的末端,後面沒有單詞字符;

/\w\b\w/ 不匹配任何字符,因爲單詞字符之後絕不會同時緊跟着非單詞字符和單詞字符。
  • (\B)
    通常用於查找不處在單詞的開頭或結尾的匹配
    匹配位置的上一個和下一個字符的類型是相同的:即必須同時是單詞,或必須同時是非單詞字符。字符串的開頭和結尾處被視爲非單詞字符。
    這裏寫圖片描述

這裏寫圖片描述

  1. (+)
    這裏寫圖片描述
  2. (*)
    可以用於檢索兩個以上,附加作用
    這裏寫圖片描述
  3. (?)
    這裏寫圖片描述
  4. ({X})
    這裏寫圖片描述
  5. ({X,Y})
    這裏寫圖片描述
  6. ({X,})
    這裏寫圖片描述
  7. ($)
    這裏寫圖片描述
  8. (^)
    這裏寫圖片描述
  9. (?=)
    這裏寫圖片描述
  10. (?!)
    這裏寫圖片描述

實例

/abc/               匹配字符串整體
/[abc]/             匹配滿足範圍裏的任意一個字符
/[^123]/            ^ 在[]纔是非的意思
/[A-Z0-9]/          匹配滿足範圍裏的任意一個字符
/[A-z][0-9]/        匹配兩個字符:分別滿足各自範圍要求
/(red|blue|green)/  匹配其中任何一個
/[\w\W]/            相當於匹配全部字符,任選其一

/aa/        [aa]
/aa/g       [aa,aa,aa]
/(aa)/    
/(aa)+/     [aaaa]
/aa+/       [aaaaa]

/a{2,4}/    [aa,aa]   貪心匹配原則
/a{2,4}?/   [aaaa]    非貪心匹配
/a+?/       [a,a,a,a]
/a*?/       [ , , , , ]

/(\w)(\w)\1/  反向引用,當第一個任意字母匹配後,第三位同步第一位
// 已經匹配成功的字符不會重複匹配

/is(?=all)/  正向預查

/^a/gm       str = 'andfsde\nabiu'   [a,a]
/^a/g        [a]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章