鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ 正則表達(dá)式,要怎麼從下一個字開始匹配,而不是從下一個詞?

正則表達(dá)式,要怎麼從下一個字開始匹配,而不是從下一個詞?

使用正則表達(dá)式時,發(fā)現(xiàn)匹配都會從以匹配到的詞的下一個詞開始,請問要怎么讓他依照字串index順序去找查?

比如: "SegmentFault是一個好論壇"

我寫正則表達(dá)式: [x{4e00}-x{9fa5}]{2}

可以匹配到 : "是一" "個好" "論壇"

但我今天想匹配到 : "是一" "一個" "個好" "好論" "論壇"

請問用什麼方法可以實現(xiàn)?

回答
編輯回答
巴扎嘿

不同語言有不同處理方式,在 JavaScript 中,全局匹配的正則會有個 lastIndex 屬性可以調(diào)整下次匹配的開始位置。

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)
2017年1月15日 16:22
編輯回答
挽青絲

單純用正則的話,應(yīng)該不好處理,因為被匹配到的內(nèi)容相當(dāng)于被消耗掉了,不會匹配兩次。
如果是js的話,可以這么寫

var str="SegmentFault是一個好論壇";
var regex=/[\u4e00-\u9fa5]{2}/g;
var matchStr=null;
var result=[];
while((matchStr=regex.exec(str))!=null){
    result.push(matchStr[0]);
    regex.lastIndex--;
}

圖片描述

2017年11月18日 01:12
編輯回答
喜歡你

遞歸

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);
2018年6月21日 00:52