正規表示式某些元字元的理解,基於js

2021-08-10 04:49:46 字數 2939 閱讀 4714

正規表示式的字元描述,網上一搜一大堆,但是由於只有描述而沒有具體例子,讓人感覺還是有些模糊。

於是,我整理了一些比較不容易理解的字元的具體例子,加深理解。

先打個基礎吧:

正規表示式中的元字元可以分為兩種:匹配位置和匹配字元的元字元。

匹配位置的元字元:顧名思義就是設定要匹配的字串的位置,匹配的是乙個位置而不是乙個字元。包括3種:^、$、\b。

匹配字元的元字元:通常只能匹配字串集合中的乙個字元。包括:. 、\w、\w、\s、\s、\d、\d  這7種。

( ):用於分組,分組又稱子表示式。分組後將()內的表示式看做乙個整體。也就是如果後接下面的限定符,即可對整個()內匹配多次。

(exp)這種形式又稱捕獲,即

匹配exp,並

捕獲文字到自動命名的組裡

另外,當被分組後,每個組自動有乙個組號(從1開始)。該組號代表該組的表示式。\分組號  表示引用該分組。

如(\d)\d\1 這裡的"\1"就是對"(\d)"的後向引用。

[  ]:表示乙個字元組(有的書上寫字元類),表示匹配方括號中的任意乙個。也就是只佔乙個字元的位置。

表示重複匹配n次、至少匹配n次、表示匹配n到m次

限定符:上面說過元字元只能匹配乙個位置或乙個字元,要匹配多次需要用限定符。也就是說限定符可以指定特定字元或字符集匹配多少次。

包括但不限於:、、、+、?、*等等。

注意:只指定前面的乙個字元(能佔乙個字元位的比如上面的匹配字元的元字元或者有實際意義的字元(數字、字母等等))

或者字符集(即上面的分組()中的內容)。

1、^

用法1:匹配輸入的開始。如果多行標誌被設定為true,那麼也匹配換行符後緊跟的位置。

換句話說,只有在最開始(索引為0)搜尋到匹配項才算,而[1]以後搜尋到就不行。

例如:^string

表示匹配以string開頭的行。

js例子如下:

var p=/^a/g;

p.exec('parent'); //false

用法2:當  ^ 作為第乙個字元出現在乙個字元集合模式時,表示反義。

即:[^]表示不包含,預設是乙個字元長度。

例如:[^xyz]它匹配任何乙個沒有包含在方括號中的字元。

注意這裡[^xyz]只佔1位,即除xyz的任意乙個字元。

如下:

var l=/[^xyz]/g;

注:因為var l的是g模式,所以再次呼叫exec()方法是從前乙個被發現的匹配項以後搜尋。

2、$

用法:匹配輸入的結束。如果多行標示被設定為true,那麼也匹配換行符前的位置。

例如,/t$/ 並不會匹配 "eater" 中的 't',但是會匹配 "eat" 中的 't'。

即/string$/表示一定要匹配末尾是string的匹配項

var m=/ple$/g;

3、?

用法1:匹配前面乙個表示式0次或者1次。等價於 。

例如:colou?r   :  u?表示匹配前乙個字元 0到1次。整體表示匹配colour或color。

用法2:在限定符*、+、{}、?後接?,表示非貪婪模式,即盡可能少的匹配。

"*?"   重複任意次,但盡可能少重複 

如 "acbacb"  正則  "a.*?b" 只會取到第乙個"acb" 原本可以全部取到但加了限定符後,只會匹配盡可能少的字元 ,而"acbacb"最少字元的結果就              是"acb" 

"+?"  重複1次或更多次,但盡可能少重複

與上面一樣,只是至少要重複1次

"??" 重複0次或1次,但盡可能少重複

如 "aaacb" 正則 "a.??b" 只會取到最後的三個字元"acb"

"?"  重複n到m次,但盡可能少重複

如 "aaaaaaaa"  正則 "a" 因為最少是0次所以取到結果為空

"?"    重複n次以上,但盡可能少重複

如 "aaaaaaa"  正則 "a" 最少是1次所以取到結果為 "a"

用法3:用於分組中:

(?:x)表示匹配 'x' 但是不記住匹配項。這種叫作非捕獲括號,使得你能夠定義為與正規表示式運算子一起使用的子表示式。

例如:/(?:foo)/。如果表示式是 /foo/,將只對 『foo』 的最後乙個字元 』o『 生效。如果使用非捕獲括號,則會匹配整個 『foo』 單詞。

x(?=y) 匹配'x'僅僅當'x'後面跟著'y'.這種叫做正向肯定查詢。

例如,/jack(?=sprat)/會匹配到'jack'僅僅當它後面跟著'sprat'。/jack(?=sprat|frost)/匹配『jack』僅僅當它後面跟著'sprat'或者是『frost』。但是『sprat』和『frost』都不是匹配結果的一部分。

x(?!y) 匹配'x'僅僅當'x'後面不跟著'y',這個叫做正向否定查詢。

例如,/\d+(?!\.)/匹配乙個數字僅僅當這個數字後面沒有跟小數點的時候。正規表示式/\d+(?!\.)/.exec("3.141")匹配『141』但是不是『3.141』

正規表示式 元字元

現在你已經知道幾個很有用的元字元了,如 b 還有 d 當然還有更多的元字元可用,比如 s 匹配任意的空白符,包括空格,製表符 tab 換行符,中文全形空格等 w匹配字母或數字或下劃線或漢字等。ba w b 匹配以字母a 開頭的單詞 先是某個單詞開始處 b 然後是字母a 然後是任意數量的字母或數字 w...

正規表示式 元字元

元字元 描述.點 匹配任何單個字元。例如正規表示式r.t匹配這些字串 rat rut r t,但是不匹配root。匹配行結束符。例如正規表示式weasel 能夠匹配字串 he s a weasel 的末尾 但是不能匹配字串 they are a bunch of weasels.匹配一行的開始。例如...

正規表示式元字元

l 基本元字元 元字元說明 匹配任意單個字元 邏輯或操作符 定義乙個字元集合,匹配該集合中的乙個字元 對字元集合求非 是對整個集合求非,而不是緊挨著 符號的字元 在字元集合中定義乙個區間。如 a za z 對下乙個字元轉義。比如 n表示換行。數量元字元 元字元說明 匹配前乙個字元 子表示式 零次或多...