js正则匹配获取分组和正向反向的区别
前言
- 正则学习:http://www.zjmainstay.cn/regexp-one
- regex101网站:https://regex101.com/
- 可视化正则:https://jex.im/regulex/
正向和反向
很多人都不清楚,什么是正向,什么是方向啊,为什么后面是正向,前面是方向啊
简单点说
- 后面为什么是正向: 你识字是从左到右对吧,字在右边,右边当然是正向(顺着你阅读方向)
- 前面为什么是反向: 你识字是从左到右对吧,字在左边,左边当然是反向了(反着你阅读方向)
明白了上面这些,看几个案例熟悉下吧(图+文字)
示例转载自@思否-柏拉图的理想国
example(?:pattern)
和
?=pattern
的区别就是?:pattern
会将其匹配进内容里面匹配pattern但不获取匹配结果,也就是说这是一个**非获取匹配(也就是不会获取这个括号里面的分组)**,不进行存储供以后使用。这在使用或字符
(|)
来组合一个模式的各个部分是很有用。例如factor(?:y|ies)
就是一个比factory|factories
更简略的表达式/factor(?:y|ies)/
:匹配字符串factor后面是y为ies的完整字符串,等同于factory|factories
1 | var ary = 'factorywork' |
example(?=pattern) 正向肯定
- 正向肯定预查,在任何匹配pattern的example开始处匹配查找字符串。这是一个非获取匹配,该匹配不需要获取供以后使用。
/factory(?=\d)/g
:匹配字符串factory后面是数字的内容
1 | var ary = 'factory123work123factory866' |
example(?!pattern) 正向否定
- 正向肯定预查,在任何匹配pattern的example开始处匹配查找字符串。这是一个非获取匹配,该匹配不需要获取供以后使用。
/factory(?!\d)/g
:匹配字符串factory后面不是数字的字符串
1 | var ary = 'factorywork123factory866' |
(?<=pattern)example 反向肯定
反向肯定预查,与正向肯定预查类似,只是方向相反。查找符合表达式pattern的example。
/(?<=\d)factory/g
:匹配字符串factory前面是数字的字符串
1 | var ary = 'factorywork123factory866' |
(?<!pattern)example 反向否定
- 反向否定预查,与正向否定预查类似,只是方向相反。
/(?<!\d)factory/g
:匹配字符串factory前面不是数字的字符串
1 | var ary = 'thisfactorywork123factory866' |
匹配获取分组
- 有时候啊,就想获取那个分组匹配的结果,就像regx101颜色标记的那样子,后面发现没几个人分析这方面知识
- 举个简单例子
1 | const temp = "factory123work123factory866"; |
- 那么要怎么获取结果呢?当然,你可以反向思考通过
replace
方法,使用第二个参数传入空字符串去替换,你也可以将第二个参数传入函数供正则使用,这样子就可以获取到匹配的分组结果了,当然,你也可以自己做处理汇聚为一个数组
1 | const temp = "factory123work123factory866"; |
- 当然,你也可以在replace当中返回值用作替换的值
1 | const temp = "factory123work123factory866"; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梦洁小站-属于你我的小天地!
评论