正则表达式
* 匹配前面的子表达式零次或多次
+ 匹配前面的字表达式一次或多次
?匹配前面的字表达式零次或一次
{n} 匹配n次
{n,} 至少匹配n次
{n,m} 至少n次最多M次
[] 匹配中括号中有的 如 [123] 就可以匹配到,1,2,3
[^] 除了中括号的有的 都匹配
*、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们后面加上一个?就可以实现非贪婪或最小匹配
正则圆括号
()里的正则表达式 可以进行引用 \1即表示第一个圆括号里的表达式
/['"][^'"]*['"]/ 可以改为 /(['"])[^'"]\1/
\1 就是 ['"]
"(?" 和 ")" 进行的分组不会创建带数字编码的引用,意思就是不可以用圆括号的那种\1的方式
********************************************************此部分内容摘抄至***************************************************************
http://www.runoob.com/regexp/regexp-metachar.html
(pattern)
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?<=pattern)
反向(lookbehind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
****************************************************************************************************************************************
// var str = "95Windows";
// var patt1 = /(?:95|98|NT|2000)Windows/;
// console.log(str.match(patt1));
// var str = "Windows95";
// var patt1 = /Windows(?=95|98|NT|2000)/;
// console.log(str.match(patt1));
// var str = "Windows3";
// var patt1 = /Windows(?!95|98|NT|2000)/;
// console.log(str.match(patt1));
// var str = "95Windows";
// var patt1 = /(?<=95|98|NT|2000)Windows/;
// console.log(str.match(patt1));
// var str = "3Windows";
// var patt1 = /(?<!95|98|NT|2000)Windows/;
// console.log(str.match(patt1));
简要说明,()和(?:)用法一样。()可以 \1 的方式进行引用
(?=)(?!) 就是正向匹配
(?<=)(?<!) 就是反向匹配
这四个 不会匹配 括号里的内容,我理解为就是 条件,筛选条件。
"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows"
Windows(?=95|98|NT|2000) 表达式只匹配 Windows95 Windows98 WindowsNT Windows2000 中的 Windows
正则表达式g模式和非g模式
g是global的缩写啊!就是匹配全部可匹配结果,
如果你不带g,在正则过程中,字符串是从左至右匹配的,如果匹配成功就不再继续向右匹配了,如果你带g,它会重头到尾的把正确匹配的字符串挑选出来
var str = 'aaaaaaaa'
var reg1 = /a/
var reg2 = /a+/
var reg3 = /a/g
str.match(reg1) // 结果为:["a", index: 0, input: "aaaaaaaa"]
str.match(reg2) // 结果为:["aaaaaaaa", index: 0, input: "aaaaaaaa"]
str.match(reg3) // 结果为:["a", "a", "a", "a", "a", "a", "a", "a"]
/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)
即new RegExp("模式"[,"标记"]))
pattern(模式)表示正则表达式的文本
flags(标记):如果指定此项,flags可以是下面值之一:
/ab+c/gi
文章部分内容转载
https://www.cnblogs.com/zhangq/p/6855952.html
https://www.jb51.net/article/110230.htm