正則表達式筆記

正則表達式筆記

幾個例子

例1:
下面的正則表達式匹配的就是位於單引號或雙引號之內的所有字符.但是,它要求開始和結束的引號匹配(例如兩個都是雙引號或者都是單引號):
/[' "] [^ ' "]*[' "]/

如果要求開始和結束的引號匹配,我們可以使用如下的引用:

/( [' "] ) [^ ' "] * \1/

\1匹配的是第一個代括號的子表達式所匹配的模式.在這個例子中,它實施了一種規約,那就是開始的引號必須和結束的引號相匹配.
注意,如果反斜槓後跟隨的數字比代括號的子表達式數多,那麼它就會被解析爲一個十進制的轉義序列,而不是一個引用。

分組號是從左到右計數的左括號數

例2:
如果我們想檢索 “java” 這個詞自身 (不像在 “javascript” 中那樣作爲前綴),那麼我們可以使用模式 /\s java \s /,
它要求在詞語java之前和之後都有空格.但是這樣有兩個問題.
第一: 如果 “java” 出現在一個字符的開頭或者是結尾.該模式就不會與之匹配,除非在開頭和結尾處有一個空格.
第二: 當這個模式找到一個與之匹配的字符時,它返回的匹配的字符串前端和後端都有空格,這並不是我們想要的.
因此,我們使用詞語的邊界 \b 來代替真正的空格符 \s 進行匹配. 結果表達式是 /\b java \b/.
^ 匹配的是字符的開頭,在多行檢索中,匹配的是一行的開頭
$ 匹配的是字符的結尾,在多行檢索中,匹配的是一行的結尾
\b 匹配的是一個詞語的邊界.簡而言之就是位於字符\w 和 \w之間的位置(注意:[\b]匹配的是退格符)
\B 匹配的是非詞語的邊界的字符

容易忽略但需要時特別好用

字符[xyz]
意義:一字符列表,匹配列出中的任一字符。你可以通過連字符-指出一個字符範圍。
例如:[abcd]跟[a-c]一樣。它們匹配”brisket”中的’b’和”ache”中的’c’。

字符[^xyz]
意義:一字符補集,也就是說,它匹配除了列出的字符外的所有東西。 你可以使用連字符-指出一 字符範圍。
例如:[^abc]和[^a-c]等價,它們最早匹配”brisket”中的’r’和”chop.”中的’h’。

字符[\b]
意義:匹配一個空格(不要與\b混淆)

字符\b
意義:匹配一個單詞的分界線,比如一個空格(不要與[\b]混淆)
例如:/\bn\w/匹配”noonday”中的’no’,/\wy\b/匹配”possibly yesterday.”中的’ly’。

字符\B
意義:匹配一個單詞的非分界線
例如:/\w\Bn/匹配”noonday”中的’on’,/y\B\w/匹配”possibly yesterday.”中的’ye’。

(?:x) 匹配 x 不會捕獲匹配項。這被稱爲非捕獲括號(non-capturing parentheses)。匹配項不能夠從結果數組的元素 [1], …, [n] 或已被定義的 RegExp 對象的屬性 1,..., 9 再次訪問到。

x(?=y) 只有當 x 後面緊跟着 y 時,才匹配 x。 例如,/Jack(?=Sprat)/ 只有在 ‘Jack’ 後面緊跟着 ‘Sprat’ 時,纔會匹配它。/Jack(?=Sprat|Frost)/ 只有在 ‘Jack’ 後面緊跟着 ‘Sprat’ 或 ‘Frost’ 時,纔會匹配它。然而,’Sprat’ 或 ‘Frost’ 都不是匹配結果的一部分。

x(?!y)
只有當 x 後面不是緊跟着 y 時,才匹配 x。例如,/\d+(?!.)/ 只有當一個數字後面沒有緊跟着一個小數點時,纔會匹配該數字。
/\d+(?!.)/.exec(“3.141”) 匹配 141 而不是 3.141。

js原生正則方法

創建正則對象方法

/pattern/flags

new RegExp(pattern [, flags])

RegExp(pattern [, flags])

注意:文本格式中的參數不要使用引號標記,而構造器函數的參數則要使用引號標記。所以下面的表達式建立同樣的正則表達式:
/ab+c/i
new RegExp(“ab+c”, “i”)

當使用構造函數的時候,必須使用正常的字符串避開規則(在字符串中加入前導字符\ )是必須的。
例如,下面的兩條語句是等價的:
re = new RegExp(“\\w+”)
re = /\w+/

正則對象方法:

exec() 方法在一個指定字符串中執行一個搜索匹配。返回一個結果數組或 null。

如果你只是爲了判斷是否匹配(true或 false),可以使用 RegExp.test() 方法,或者 String.search() 方法。

var result = regExp.exec(‘The Quick Brown Fox Jumps Over The Lazy Dog’);

result 爲一個數組,幷包含index、input屬性:
[0] 匹配的全部字符串
[1], …[n ] 括號中的分組捕獲
index 匹配到的字符位於原始字符串的基於0的索引值
input 原始字符串

原生js String方法:
str.match(regexp);
返回一個包含了整個匹配結果以及任何括號捕獲的匹配結果的 Array ;如果沒有匹配項,則返回 null 。

如果正則表達式沒有 g 標誌,則 str.match() 會返回和 RegExp.exec() 相同的結果。

如果正則表達式包含 g 標誌,則該方法返回一個 Array ,它包含所有匹配的子字符串而不是匹配對象。捕獲組不會被返回(即不返回index屬性和input屬性)。如果沒有匹配到,則返回 null

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章