为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式中 (?:)到底是什么意思

正则表达式中 (?:)到底是什么意思

慕莱坞森 2019-05-25 13:46:18
例子:1.(w)((?=111)(1))+为什么=重复4次以上的字母数字,则匹配其剩下最后2位之前的部分2."abcabc".match(/(?:a)(b).*1/g);结果为["abcab"]
查看完整描述

2 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

先回答问题题目的(?:)意思这个代表不捕获分组比较(X)和(?:X),前者是捕获分组,后者不捕获,区别在于正则表达式匹配输入字符串之后所获得的匹配的(数)组当中没有(?:X)匹配的部分;比如
varm="abcabc".match(/(?:a)(b)(c)/)
//结果["abc","b","c"]
//m[0]是/(?:a)(b)(c)/匹配到的整个字符串,这里包括了a
//m[1]是捕获组1,即(b)匹配的子字符串substringorsubsequence
//m[2]是捕获组2,即(c)匹配到的
如果这样
varm="abcabc".match(/(a)(b)(c)/)
//结果["abc","a","b","c"]
第一小题应该是这样的正则表达式
/(\w)((?=111)(1))+/
这里有一个知识点zero-widthpositivelookahead,零宽断言,正向前瞻(反正我记不住意思是(?=X)匹配某个位置,右边(正向)是X,它不真正匹配捕获子串。看几个匹配的测试例子
/(\w)((?=111)(1))+/.test("1111")//true
/(\w)((?=111)(1))+/.test("2222")//false
匹配重复4次以上的字母或数字可以这么写
/(\w)(?=\1{3,})/.test("AAAAAAAA")//true
/(\w)(?=\1{3,})/.test("AAAB")//false
                            
查看完整回答
反对 回复 2019-05-25
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

"?=n"匹配任何其后紧接指定字符串n的字符串
(?:x)匹配'x'但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式/(?:foo){1,2}/。如果表达式是/foo{1,2}/,{1,2}将只对‘foo’的最后一个字符’o‘生效。如果使用非捕获括号,则{1,2}会匹配整个‘foo’单词
更多正则表达式
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 871 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号