外文翻譯——Regex(5)——字元集合與範圍

來源:互聯網
上載者:User

標籤:

本文章翻譯自Ilya Kantor所寫的JavaScript Tutorial。轉載需遵守CC BY-NC-SA協議。

原文地址:http://javascript.info/tutorial/regexp-introduction

字元集合與範圍

幾個字元或者字元類可以用方括弧"[...]"包起來,用來匹配其中之一。

例如,[eao]是指匹配"e","a"和"o"中的任意一個字母。也就是列表中的單一字元。

1 showMatch( "The OGRE on green grass!", /gr[eao]/gi ) // "GRE", "gre", "gra"

上例中,"gr[eao]"匹配了"gre"而不是"gree",因為"[eao]"只代表其中一個單一字元。

時間可以用:hour:minute或者hour-minute表示,無論是hour還是minute都是兩個數字:

09:00     21-30

寫一個正則式來匹配"Breakfast at 09:00. Dinner at 21-30."中的所有時間。

1 showMatch( "Breakfast at 09:00. Dinner at 21-30.", /\d\d[-:]\d\d/g )

注意在字元集合中,虛線"-"沒有被轉義,因為在這兒它並不是特殊字元。

修飾符"g"表示需要全域匹配而不是只返回第一個匹配值。

方括弧還可以包含字元範圍。例如"[a-z]"表示從a到z的其中一個字母,"[0-5]"則表示從0到5的其中一個數字。

1 showMatch( "Exception 0xAF", /x[A-F]/g ) // matches "xA", not "xc"

上面的例子中,並沒有匹配到"Exception"中的"xc",因為在字元範圍中只包含了大寫字母,而且並未使用"i"修飾符。

正則式匹配了"xA"而不是"xAF",因為"[A-F]"只表示從"A"到"F"中的其中一個字元。

字元,字元類,以及字元集合可以被放在一起。

以下例子尋找"a-f","A-F"中的其中一個字元,或者"x"亦或一個數字。

1 showMatch( "look -> 0xAF", /[\dA-Fa-fx]/g ) // "0", "x", "A", "F"

絕大部分字元類實際上就是對字元集合的縮寫,例如:

  • "\d"等同於"[0-9]",
  • "\w"等同於"[a-zA-Z0-9_]",
  • "\s"等同於"[\t\n\v\f\r ]"加上幾個unicode空格符號。

同樣的,還有反字元範圍:"[^...]"。

方括弧中以脫字元開始"[^...]"將匹配除了給定範圍外的所有字元。

例如:

  • [^aeou]:匹配除"a","e","o","u"以外的所有字元
  • [^0-9]:匹配所有非數字,等同於"\D"
  • [^\s]:匹配所有非空格,等同於"\S"

跟一般字元範圍一樣,反字元範圍也可以包含多個字元和範圍。下面例子將匹配非字母,非數字和非空格:

1 showMatch( "[email protected]", /[^\d\sA-Z]/gi ) // "@", "."

"sock"中可以匹配到參數"k[^s]"嗎? 

上例中的正則式需要匹配字元"k",且後面跟著字母s以外任何字元。

但是在"sock"中,字元"k"後面沒有其他字元,所以沒有匹配結果。

一個字元集合"[...]"必須要匹配一個字元,無論它是否被倒置。

大部分特殊字元放在方括弧中是不需要轉義的。

在方括弧中,你只需要轉義右方括弧"]"和反斜線"\"。

其他特殊字元只在有特殊意義的時候才需要轉義:

  • 連字號"-"只在位於兩個符號中間時,才需要轉義。如果是放在首位或者末尾,那麼就不是表示一個範圍,所以就不需要轉義;
  • 脫字元"^"只在位於首位時才需要被轉義"[\^..]";
  • 其他字元,包括點號".",加號"+",圓括弧"()",左方括弧"["等出現的時候都無需轉義。

如果你看看周圍大多數正則式代碼,特殊字元無論在正則式中的哪個位置,通常都被轉義了。

但是方括弧卻允許移除轉義,以此讓代碼變得更具可讀性。

例如,正則式"[-().^]"字面上的意思是匹配"-().^"中的其中一個字元。這個正則式中的特殊字元沒有特殊含義。

1 var re = /[-().^]/g2 3 showMatch( "f(g)-^1", re ) // matches (, ), -, ^

所以,從技術層面來說,可以在方括弧中省略多餘的斜杠。但是如果你加了斜杠也依然能正確輸出匹配結果。

1 var re = /[\-\(\)\.\^]/g 2 3 showMatch( "f(g)-^1", re ) // matches same (, ), -, ^

 

外文翻譯——Regex(5)——字元集合與範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.