正则表达式

正则表达式


* 匹配前面的子表达式零次或多次
+ 匹配前面的字表达式一次或多次
?匹配前面的字表达式零次或一次

{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

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值