1. 程式人生 > 實用技巧 >javaScript之正則表示式

javaScript之正則表示式

javaScript之正則表示式

  • 正則表示式是一個描述字元模式的物件。

1、字元類

  • 字元類是指用於匹配字元的組合。
字元類 描述
[...] 字元集合。匹配所包含的任意一個字元。如,[xyz]匹配x/y/z中任一字元
[a-z] 字元範圍。匹配指定範圍內的任意字元。
[^...] 負值字元集合。匹配未包含的任意字元。
[^a-z] 負值字元範圍。匹配任何不在指定範圍內的任意字元。
. 匹配除 "\n" 之外的任何單個字元。要匹配包括 '\n' 在內的任何字元,請使用象像'[.\n]' 的模式。
\d 匹配一個數字字元。等價於 [0-9]。
\D 匹配一個非數字字元。
\s 匹配任何空白字元,包括空格、製表符、換頁符等等。
\S 匹配任何非空白字元。
\w 匹配任何英文字母、數字、下劃線。等價於[a-zA-Z0-9_]。

2、量詞(限定符)

使用量詞可以控制字元或字串出現的次數。

量詞 描述
? 匹配前一項0次或1次,或指明一個非貪婪限定符。要匹配 ? 字元,請使用 \ ?。
? 當該字元緊跟在任何一個其他限制符 (, +, ?, {n}, {n,}, {n,m*}) 後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜尋的字串,而預設的貪婪模式則儘可能多的匹配所搜尋的字串。例如,對於字串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。
+ 匹配前一項1次或多次。要匹配 + 字元,請使用\ +。
* 匹配前一項0次或多次。要匹配 * 字元,請使用\ *。
{n} 匹配前一項恰好n次,n為非負整數
{n,} 匹配前一項至少n次
{n,m} 匹配前一項至少n次,不超過m次。n和m為非負整數,n<=m。

3、定位符

定位符 描述
^ 匹配字串的開始位置。如果設定了 RegExp 物件的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之後的位置。
$ 匹配字串的結束位置。如果設定了RegExp 物件的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。
\B 匹配非單詞邊界。
  • 不能把 '^' 的這個語法與其在括號表示式中的語法弄混。
  • 不能對定位符使用限定符。

4、選擇匹配符

選擇匹配符即|

5、分組

操作符 描述
(pattern) 匹配pattern 並獲取這一匹配。所獲取的匹配可以從產生的 Matches 集合得到。要匹配圓括號字元,請使用 '(' 或 ')'。
(?:pattern) 匹配 pattern 但不獲取匹配結果,這是一個非獲取匹配,不進行儲存供以後使用。這在使用字元 |來組合一個模式的各個部分是很有用。例如,表示式industr(?:y|ies)就比industry|industries更簡略。
(?=pattern) 正向預查,在任何匹配 pattern 的字串開始處匹配查詢字串。這是一個非獲取匹配,該匹配不需要獲取供以後使用。例如,“Windows(?=95|98|NT|2000)"能匹配 "Windows 2000" 中的 "Windows",但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。
(?!pattern) 負向預查。這是一個非獲取匹配,該匹配不需要獲取供以後使用。例如,“Windows(?=95|98|NT|2000)"能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始

6、其他特殊字元

字元 描述
[ 標記一箇中括號表示式的開始。要匹配 [,請使用 \ [。
\ 將下一個字元標記為或特殊字元、或原義字元、或後向引用、或八進位制轉義符。
{ 標記限定符表示式的開始。要匹配 {,請使用 {。

7、操作符的優先順序順序(上->下,高->低)

操作符 描述
\ 轉義符
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, *anymetacharacter* 位置和順序
| “或”操作

8、正則表示式建立物件

  • 通過正則表示式字面量建立,語法:/parttern/[flags]
  • 通過ReExp類的構造方法建立,語法:new RegExp(pattern[,flags])

pattern:必選引數,用於指定需要進行匹配的模式字串。

flags:可選引數,用於指定正則表示式的標誌資訊。

全域性標誌:g,表示匹配字串中出現的所有匹配子字串;

忽略大小寫標誌:i,表示在執行模式匹配時不區分大小寫。

多行標誌:m,表示“^”可以匹配多行字串中的每一行的開頭,"$"可以匹配多行字串中每一行的結尾。

注:通過RegExp類的構造方法建立正則表示式物件時,必須在模式字串中的”\“前面加入前導字元\,如\\d表示\d。

9、執行模式匹配

執行模式匹配有兩個方法:

  • test方法,對指定的字串執行模式(正則表示式)匹配。如果搜尋到匹配字元,則返回true,否則返回false。
  • exec方法,對指定的字串執行模式(正則表示式)匹配。如果搜尋到匹配字元,則返回一個數組,否則返回null。這個陣列的第一個元素包含與正則表示式相匹配的字串,其他元素包含匹配的各個分組

引例1:

<script>
    var str1="0753-123456";
    var objRe1=/^((\d{3}-)?\d{8})$|^((\d{4}-)?\d{7,8})$/;
    if(objRe.test(str1)){
        alert("匹配成功!")
    }
</script>

引例2:

<script>
    var str2="220204202008160304";
    var objRe2=/\d{6}([12]\d{3})(0\d|1[12])([0123]\d)\d{4}/;
    arr=objRe.exec(str2);
    if(arr!=null){
        alert("你的身份證號碼為:"+arr[0]+"\r出生日期為:"+arr[1]+"-"+arr[2]+"-"+arr[3]);
    }
</script>