1. 程式人生 > 實用技巧 >基礎-正則表示式

基礎-正則表示式

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

建立一個正則表示式

  • var re = /ab+c/;當正則表示式保持不變時,使用此方法可獲得更好的效能。

編寫一個正則表示式的模式

斷言:表示一個匹配在某些條件下發生。

  • ^:匹配輸入的開頭。如果多行模式設為 true,^ 在換行符後也能立即匹配,比如 /^A/ 匹配不了 "an A" 裡面的 "A",但是可以匹配 "An A" 裡面第一個 "A"。
  • $:匹配輸入的結束。如果多行模式設為 true,^ 在換行符前也能立即匹配,比如 /t$/ 不能匹配 "eater" 中的 "t",但是可以匹配 "eat" 中的 "t"。
  • \b:匹配一個單詞的邊界,這是一個字的字元前後沒有另一個字的字元位置, 例如在字母和空格之間。需要注意的是匹配的單詞邊界不包括在匹配中。換句話說,匹配字邊界的長度為零。
/\bm/  在 "moon" 中匹配到 "m" 
/oo\b/  在 "moon" 中不會匹配到 "oo", 因為 "oo" 後面跟著 "n" 這個單詞字元.
/oon\b/ 在 "moon" 中匹配 "oon", 因為 "oon" 是這個字串的結尾, 因此後面沒有單詞字元
/\w\b\w/ 將永遠不會匹配任何東西,因為一個單詞字元後面永遠不會有非單詞字元和單詞字元。
  • \B:匹配非單詞邊界。這是上一個字元和下一個字元屬於同一型別的位置:要麼兩者都必須是單詞,要麼兩者都必須是非單詞,例如在兩個字母之間或兩個空格之間。字串的開頭和結尾被視為非單詞。與匹配的詞邊界相同,匹配的非詞邊界也不包含在匹配中。例如,/\Bon/ 在 “at noon” 中匹配 “on” ,/ye\B/ 在 "possibly yesterday"中匹配"ye" 。
  • 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’。
  • (?<=y)x:向後斷言: x 跟隨 y 的情況下匹配 x。例如,對於/(?<=Jack)Sprat/,“Sprat”緊隨“Jack”時才會得到匹配。對於/(?<=Jack|Tom)Sprat,“Sprat”在緊隨“Jack”或“Tom”的情況下才會得到匹配。不過,匹配結果中不包括“Jack”或“Tom”。
  • (?<!y)x:向後否定斷言: x 不跟隨 y 時匹配 x。例如,對於/(?<!-)\d+/,數字緊隨-符號的情況下才會得到匹配。對於/(?<!-)\d+/.exec(3) ,“3”得到匹配。 而/(?<!-)\d+/.exec(-3)的結果無匹配,這是由於數字之前有-符號。

字元類:區分不同型別的字元,例如區分字母和數字。

組和範圍:表示表示式字元的分組和範圍。

量詞:表示匹配的字元或表示式的數量。

Unicode 屬性轉義:基於 unicode 字元屬性區分字元。例如大寫和小寫字母、數學符號和標點