几个带?的正则表达式语法(js)

这里都是?开头的语法,平常不太用,不太好记,可以参考http://www.jb51.net/tools/regexsc.htm
推荐个工具http://regex.zjmainstay.cn/,比较全面,而且有匹配的步骤,可以看出自己的表达式写的好不好

chrome版本 65.0.3325.181(正式版本) (64 位)

(?:pattern) 非捕获匹配

举例,这个例子里幺蛾子不少,我估计不同版本浏览器的结果应该还不一样,专门写了一篇来讨论这个例子https://blog.csdn.net/u011393161/article/details/79928944
"abcabc".match(/(?:a)(b)(c)/)
输出
[“abc”, “b”, “c”]
简单地说,匹配但不放到输出结果
脚本之家的描述不进行存储供以后使用。这在使用或字符"(|)"来组合一个模式的各个部分是很有用。例如"industr(?:y|ies)"就是一个比"industry|industries"更简略的表达式。

(?=pattern) 正向肯定预查

举例
"what abedroom".match(/.*?bed(?=room)/)
输出
[“what abed”]
简单地说,匹配?=所在括号的前面的内容(也就是例子里面的.*?bed),然后括号里的内容也要匹配但是不放到输出结果里
脚本之家的描述预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。说实话,没看懂

(?!pattern) 正向否定预查

举例
"what abedroom abed123".match(/.*?bed(?!room)/)
输出
[“what abedroom abed”]
和上面的例子正好相反,?!所在括号的内容要不匹配,注意这个例子,如果.*不用?的话,比用?要少很多步

(?<=pattern) 反向肯定预查

举例
"what abedroom123".match(/(?<=room)123/)
输出
[“123”]

(?<!pattern) 反向否定预查(为什么标红呢,因为左尖括号加感叹号有问题)

举例
"what abedroom123".match(/(?<!bed)123/)
输出
[“123”]

上面举的几个例子都比较简单,复杂起来还是有很多问题的,随便举几个神奇的例子
这几个例子我都是带着“什么,怎么会这样”的表情看输出的

举例
"what abedroom123".match(/123(?<!bed)/)
输出
[“123”]

举例
"what abedroom123".match(/123(?<=bed)/)
输出
null,为什么你的输出和你的兄弟不太一样,这个输出让我想到了炉石里的一张卡,食人魔法师

举例
"what abedroom123".match(/(?!room)123/)
输出
[“123”]

举例
"what abedroom123".match(/(?=room)123/)
输出
null

上面这是一组,下面这是一组

举例
"what abedroom123".match(/(?=room).*?/)
输出
null

举例
"what abedroom123".match(/(?=room).*/)
输出
[“room123”]

举例
"what abedroom123".match(/(?!room).*/)
输出
[“what abedroom123”]

举例
"what abedroom123".match(/(?!room).*?/)
输出
null

好了,举例就到这里,我感觉我已经很累了,也许哪天会来看看到底为什么会这样,但是可能性不大

猜你喜欢

转载自blog.csdn.net/u011393161/article/details/79930986
今日推荐