前言: 在做算法题中, 关于字符串, 总是习惯于用正则表达式去处理。其中就有一个题目要求是匹配11, 1, 2。并对他们进行不同的替换。于是就有了这篇杂记。 本文主要是关于replace函数 ; 正则表达式中的[] 和 |的讲解。 如果看官有兴趣,请继续往下看。
最初的版本与出现的问题
看到该题, 第一反应写下的代码如下:
let str = "1111111111111111111112"
//正则表达式
let reg = /[11 1 2]/g
//使用replace函数
str.replace(reg, function(match){
//操作
})
在以上代码中, 你会发现永远都不会 匹配到11, 只会匹配1 和2。想了想在正则表达式中[]方括号中的元素, 没有优先级, 所以有1就会匹配1, 11就永远被1拦截了。
那么怎么办才能把11的优先级提到1的前面呢?
思来想去, 终于想起 “|” 这个或操作符。 首先, | 和[]相同的是,都是或操作符, 都多匹配。我想, 肯定有不同的地方, 于是大胆的测试, 第一版的问题终于解决的了。 |会先匹配放在前面的元素。
(这里有一个问题, 是之前为没有理解清楚[]的原因造成的, 那就是[11 1 2]匹配的是1和空格还有2三个字符)
第二版代码
let str = "1111111111111111111112"
//正则表达式
let reg = /11|1|2/g
//使用replace函数
str.replace(reg, function(match){
//操作
console.log(match)//能匹配11就打印11,否则才打印1
})
转载自原文链接, 如需删除请联系管理员。
原文链接:正则表达式的或匹配——[]和|(优先匹配),转载请注明来源!