限定符(貪婪)

ab+c,可以匹配 abc、abbc 等,+ 號代表【前面的字符】必須出現【1次或多次】

ab*c,可以匹配 ac、abc 等,* 號代表【前面的字符】必須出現【0次、1次或多次】

ab?c,可以匹配 ac 或 abc,? 問號代表【前面的字符】只可以出現【0次、或1次】

ab{2}c,可以匹配 abbc,{n} 代表【前面的字符】只可以出現【n次】

ab{2,}c,可以匹配 abbc、abbbc 等,{n,} 代表【前面的字符】只可以出現【>=n次】

ab{2,3}c,可以匹配 abbc 、 abbbc,{n,m} 代表【前面的字符】只可以出現【n次~m次(包括m、n)】

懶惰限定符

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

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

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

{n,}?,重復n次以上,但盡可能少重復

{n,m}?,重復n到m次,但盡可能少重復

同上,區別為盡可能少重復。例:(abc)+?d 匹配結果為 abcd,而(abc)+d 匹配結果為 abcd、abcabcd 等

元字符

^,可以匹配字符串開始位置,^a --> 必須開頭為a,如ab等

$,可以匹配字符串結尾位置,b$ --> 必須結尾為b,如ab等

. ,可以匹配除換行符以外的任意字符

\b,可以匹配單詞邊界(開始字符為單詞與空格交界處),如 \bam\b 匹配 "i am fine" 中的 am

\w,可以匹配字母、數字、下劃線(有時可漢字等?),基本等價于 [^A-Za-z0-9_]

\s,可以匹配任意的空白符(空格),如 \w\s\w,可以匹配 a b

\d,可以匹配數字,如 \d\d\d-\d\d\d,可以匹配 123-456

[abc],可以匹配包含括號內元素的字符,特殊有[a-z]、[A-Z]、[0-9]等

(),分組,使括號里為一體

|,或,有其一即可

轉義字符: \

?=n,可以匹配任何其后緊接著字符串n的字符串

反義字符

\B,可以匹配非單詞邊界(開始字符在單詞內部),如 \Bin\B 匹配 “i am fine” 中的 in

\W,可以匹配非字母、數字、下劃線

\S,可以匹配非空白符(空格)

\D,可以匹配非數字

[^abc],可以匹配除了ABC之外的字符

?!n,可以匹配任何其后沒有緊接著字符串n的字符串

模式修正符

i:ignore 不區分大小寫的匹配,如:/abc/i,匹配abc、ABc等

g:global 表示全局匹配,是,則從左到右至結尾,每個符合條件均記錄;否,則從左到右,第一個符合條件即結束

m:more 將字符串視為多行,使用^和$表示任何一行都可以以正則表達式開始或結束,如,g與m搭配使用

>> var str = "abcggab\nabcoab";
>> var preg1 = /^abc/gm;
>> str.match(preg1)
<< (2) ["abc", "abc"] // 以abc開頭的行
>> var preg2 = /ab$/gm;
>> str.match(preg2)
<< (2) ["ab", "ab"] // 以ab結尾的行

s:特殊字符.(圓點)本是匹配除換行符\n之外的任何單字符,此模式.中包含換行符,如/b./s,匹配b/na

x:將模式中的空白忽略

A:強制從目標字符串開頭匹配,如:/abc/A,匹配abcde,不能匹配deabc

D:如果使用$限制結尾字符,則不允許結尾有換行,如:/abc/D,不能匹配deabc\n

U:只匹配最近的一個字符串,不重復匹配,相當于去貪婪,如:/a(.*?)c/ 和 /a.*c/U 等價,匹配abc

e:配合函數preg_replace()使用

JS使用正則表達式

let reg = /正則規則/模式修正符;
reg.match(value); // 這個方法有點像 exec,但 exec 是 RegExp 對象的方法;match 是 String 對象的方法

 RegExp對象

https://www.w3school.com.cn/js/js_obj_regexp.asp

let reg = new RegExp("正則規則","模式修正符");
>> let patt1 = new RegExp("e");

// 檢索字符串中的指定值。返回值是 true 或 false
>> patt1.test("The best things in life are free")
<< true

// 方法檢索字符串中的指定值。返回值是被找到的值。如果沒有發現匹配,則返回 null
>> patt1.exec("The best things in life are free")
<< ["e", index: 2, input: "The best things in life are free", groups: undefined]

// 既可以改變檢索模式,也可以添加或刪除第二個參數
>> patt1.compile("d"); 
<< /d/
>> patt1.test("The best things in life are free")
<< false

匹配工具

https://rubular.com/

https://pan.baidu.com/s/19Yn49

參考文章

http://www.rzrgm.cn/zery/p/3438845.html

 https://www.runoob.com/regexp/regexp-syntax.html

http://www.360doc.com/content/18/0816/09/57605256_778653884.shtml