使用正则表达式时,发现匹配都会从以匹配到的词的下一个词开始,请问要怎么让他依照字串index顺序去找查?
比如: "SegmentFault是一个好论坛"
我写正则表达式: [x{4e00}-x{9fa5}]{2}
可以匹配到 : "是一" "个好" "论坛"
但我今天想匹配到 : "是一" "一个" "个好" "好论" "论坛"
请问用什麽方法可以实现?
使用正则表达式时,发现匹配都会从以匹配到的词的下一个词开始,请问要怎么让他依照字串index顺序去找查?
比如: "SegmentFault是一个好论坛"
我写正则表达式: [x{4e00}-x{9fa5}]{2}
可以匹配到 : "是一" "个好" "论坛"
但我今天想匹配到 : "是一" "一个" "个好" "好论" "论坛"
请问用什麽方法可以实现?
递归
var string = "SegmentFault";
var reg = /[\w]{2}/;
function seg(str) {
if (str.length) {
console.log(str.match(reg)[0]);
str = str.substring(1, str.lenfth);
seg(str);
}
}
seg(string);
不同语言有不同处理方式,在 JavaScript 中,全局匹配的正则会有个 lastIndex
属性可以调整下次匹配的开始位置。
const str = "SegmentFault是一个好论坛"
const matcher = /[\u4e00-\u9fa5]{2}/g
const result = []
while (true) {
const m = matcher.exec(str)
if (!m) { break }
result.push(m[0])
matcher.lastIndex = matcher.lastIndex - m[0].length + 1
}
console.log(result)
单纯用正则的话,应该不好处理,因为被匹配到的内容相当于被消耗掉了,不会匹配两次。
如果是js的话,可以这么写