javascript之Regex,javascript

來源:互聯網
上載者:User

javascript之Regex,javascript

建立Regex的兩種方法

顯式

new RegExp(“pattern”[,”flags”]);

var regex = new ("abc","gi");

第一個參數為要匹配的模式,第二個為標識資訊,有三種標識資訊:

g:全域標識,表示對文本中所有匹配的部分起作用,如不設定,則僅搜尋和匹配第一個出現的文本段  global

i:忽略大小寫標識   ignoreCase

m:多行標識,如不設定這標識,那麼元字元“^”和“$”只與文本的開始位置和結尾位置相匹配,如果設定此標識,還可以與字串中“\n”、“\r”後的位置,即下一行的行首和行尾進行匹配   multiLine

隱式

/pattern/[flags]  不用加引號

例 

var regex = /\w+/i;var regex = new RegExp("\\w+","i");

以上兩者是等價的,當用顯式建構函式時,模式字串中的特殊符號應該使用逸出字元,即加上“\”前置字元號

 

模式比對符

\     指出後面的字元為特殊字元

^    匹配的字元必須在最前面

$    匹配的字元必須在最後面

*    匹配前面的字元0次或n次

+    至少1次

?  0或1次

.     匹配除分行符號之外的所有單個字元

x|y        匹配x或y

(x)         標記子運算式的起止位置

{n}         匹配前面的n個字元

{n,}        匹配前面的至少n個字元

{n,m}    匹配前面的n到m個字元

[xyz]      匹配列出的任一字元

[^xyz]    匹配列出的任一字元的補集,即匹配列出字元之外的其他任一字元

[a-d]     匹配abcd當中的任一字元

[\b]       匹配一個空格

\b          匹配一個單詞的分界線,比如一個空格

\B         匹配一個單詞的非分界線

\d          匹配一個數字,等價於[0-9]

\D         匹配一個非數字

\f          匹配一個表單符

\n          匹配一個分行符號

\r          匹配一個斷行符號符

\s          匹配一個空單符,包括空格、Tab、feed、form、分行符號,等價於 [\f\n\r\t\v]

\S          匹配一個定位字元

\w         匹配所有的字母、數字及底線,等價於[A-Za-z1-9_]

\W        匹配\w的補集

 

貪婪匹配與非貪婪匹配

Regex預設貪婪匹配,即使用最長相符原則

例 要將“book”中匹配“bo?”的部分替換成“l”,替換結果為“lok”,而不是“look”

當“?”緊跟在任何其他限定符(*、+、?、{n}、{n,m})之後時,使用非貪婪模式

例 有字串“booook”,“bo+?”只匹配“bo”部分,而“bo+”匹配“boooo”

選擇匹配符

“|”的兩個選項是兩邊儘可能最大的運算式

例 “abcd|efgh2”匹配的是“abcd”或“efgh”,而不是“abcd2”或“efgh2”,如要匹配“abcd2”或“efgh2”,應該建立“(abcd|efgh)2”

特殊字元

如果要匹配以下特殊字元的字面意思,需用“\”進行轉義

^    $     *     +     ?     .      (      )      [      ]      {      }      |     \      /

Regex的靜態屬性

(1)index屬性。是當前運算式模式最初相符內容的開始位置,從0開始計數。其初始值為-1,每次成功匹配時,index屬性都會隨之改變。

(2)input屬性。返回當前所作用的字串,可以簡寫為$_,初始值為空白字串""。

(3)lastIndex屬性。是當前運算式模式最初相符內容中最後一個字元的下一個位置,從0開始計數,常被作為繼續搜尋時的起始位置,初始值為-1,表示從起始位置開始搜尋,每次成功匹配時,lastIndex屬性值都會隨之改變。

(4)lastMatch屬性。是當前運算式模式的最後一個匹配字串,可以簡寫為$&。其初始值為空白字串""。在每次成功匹配時,lastMatch屬性值都會隨之改變。

(5)lastParen屬性。如果運算式模式中有括起來的子匹配,是當前運算式模式中最後的子匹配所匹配到的子字串,可以簡寫為$+。其初始值為空白字串""。每次成功匹配時,lastParen屬性值都會隨之改變。

(6)leftContext屬性。是當前運算式模式最後一個匹配字串左邊的所有內容,可以簡寫為$`(其中“'”為鍵盤上“Esc”下邊的反單引號)。初始值為空白字串""。每次成功匹配時,其屬性值都會隨之改變。

(7)rightContext屬性。是當前運算式模式最後一個匹配字串右邊的所有內容,可以簡寫為$'。初始值為空白字串""。每次成功匹配時,其屬性值都會隨之改變。

(8)$1…$9屬性。這些屬性是唯讀。如果運算式模式中有括起來的子匹配,$1…$9屬性值分別是第1個到第9個子匹配所捕獲到的內容。如果有超過9個以上的子匹配,$1…$9屬性分別對應最後的9個子匹配。在一個運算式模式中,可以指定任意多個帶括弧的子匹配,但RegExp對象只能儲存最後的9個子匹配的結果。在RegExp執行個體對象的一些方法所返回的結果數組中,可以獲得所有圓括弧內的子匹配結果。

執行個體屬性

(1)global屬性。返回建立RegExp對象執行個體時指定的global標誌(g)的狀態。如果建立RegExp對象執行個體時設定了g標誌,該屬性返回True,否則返回False,預設值為False。

(2)ignoreCase屬性。返回建立RegExp對象執行個體時指定的ignoreCase標誌(i)的狀態。如果建立RegExp對象執行個體時設定了i標誌,該屬性返回True,否則返回False,預設值為False。

(3)multiLine屬性。返回建立RegExp對象執行個體時指定的multiLine標誌(m)的狀態。如果建立RegExp對象執行個體時設定了m標誌,該屬性返回True,否則返回False,預設值為False。

(4)source屬性。返回建立RegExp對象執行個體時指定的運算式文本字串。

RegExp對象的方法

test方法

文法格式為test(str)。該方法檢查一個字串中是否存在建立RegExp對象執行個體時所指定的運算式模式,如果存在就返回True,否則返回False。如果找到匹配項,則會更新RegExp對象中的有關靜態屬性,以反映匹配情況。

exec方法

文法格式為exec(str)。該方法使用建立RegExp對象執行個體時所指定的運算式模式對一個字串進行搜尋,並返回一個包含搜尋結果的數組。

如果為Regex設定了全域標誌(g),可以通過多次調用exec和test方法在字串中進行連續搜尋,每次都是從RegExp對象的lastIndex屬性值指定的位置開始搜尋字串。

如果沒有設定全域標誌(g),則exec和test方法忽略RegExp對象的lastIndex屬性值,從字串的起始位置開始搜尋。

如果exec方法沒有找到匹配,返回值為null;如果找到匹配,則返回一個數組,並更新RegExp對象中有關靜態屬性以反映匹配情況。返回數組中的元素0包含了完整的匹配結果,而元素1~n依次是運算式模式中定義的各個子匹配的結果。

exec方法返回的數組有3個屬性,分別是input、index和lastIndex。

input屬性是整個被搜尋的字串。

index屬性是指匹配在整個被搜尋字串中的位置。

lastIndex屬性是指匹配的子字串的最後一個字元的下一個字元位置。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.