JavaScript:Regex(7)

來源:互聯網
上載者:User

⑦ 指定匹配的位置

正如前面所介紹的,Regex中的多個元素才能夠匹配字串中的一個字元。例如,\s匹配的只是一個空白符。還有一些Regex的元素匹配的是字元之間的位置,而不是實際字元。例如\b匹配的是一個單字的邊界,即位於\w(ASCII單字字元)字元和\W(非單字字元)之間的邊界,或位於一個ASCII單字字元與一個字串的開頭或結尾之間的邊界。像\b這樣的元素不指定匹配的字串中使用的字元,它們指定的是匹配所發生的合法位置。有時我們稱這些元素為Regex的錨,因為它們將模式定位在檢索字串中的一個特定位置上。最常用的錨元素是^,它使模式定位在字串的開頭,而錨元素$則使模式定位在字串的末尾。

例如,要匹配單字“JavaScript”,可以使用Regex/^JavaScript$/。如果想檢索“Java”這個單字自身(不像在“JavaScript”中那樣作為首碼),可以使用模式/\sJava\s/,它要求在單字Java之前和之後都要有空格。但是這樣做有兩個問題:

⑴ 如果“Java”出現在一個字串的開頭或結尾,該模式就不會與之匹配,除非在開頭處或者結尾處有一個空格。

⑵ 當這個模式找到了一個與之匹配的字串時,它返回的匹配字串的前端和後端都有空格,這並不是我們想要的。

因此我們使用單字的邊界\b來代替真正的空格符\s進行匹配。結果運算式是/\bJava\b/。

元素\B將把匹配錨定在不是單字邊界的位置。因此,模式/\B[Ss]cript/與“JavaScript”和“postscript”匹配,但是不與“script”和“Scripting”匹配。

在JavaScript 1.5中,還可以使用任意的Regex作為錨定條件。如果在符號“(?=”和“)”之間加入一個運算式,它就是一個前向聲明,指定接下來的字元必須被匹配,但並不真正進行匹配。例如要匹配一種常用的程式設計語言的名字,但只在其後有冒號時匹配,可以使用/[Jj]ava([Ss]cript)?(?=\:)/。這個模式與“JavaScript:The Definitive Guide”中的單字“JavaScript”匹配,但是與“Java
in a Nutshell”中的“Java”不匹配,因為其後沒有冒號。

如果用“(?!”引入聲明,它將是反前向聲明,指定接下來的字元都不必匹配。例如/Java(?!Script) ([A-Z]\w*)/匹配的是“Java”後跟隨一個大寫字母和任意多個ASCII單字字元,但是不能跟隨“Script”。它與“JavaBeans”匹配,不與“Javanese”匹配,與“JavaScrip”匹配,但不與“JavaScript”或“JavaScripter”匹配。

下表總結了Regex的錨:

Regex的錨字元
字元 含義
 ^ 匹配字串的開頭,在多行檢索中,匹配一行的開頭
 $ 匹配字串的結尾,在多行檢索中,匹配一行的結尾
 \b 匹配一個詞語的邊界。簡而言之,就是位於字元\w和\W之間的位置,或位於字元\w和字串的開頭或結尾之間的位置
 \B 匹配非詞語邊界的位置
 (?=p) 正前向聲明,要求接下來的字元都與模式p匹配,但是不包括匹配中的那些字元。
 (?!p) 反前向聲明,要求接下來的字元不與模式p匹配

相關文章

聯繫我們

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