在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

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

比如: "SegmentFault是一個(gè)好論壇"

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

可以匹配到 : "是一" "個(gè)好" "論壇"

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

請(qǐng)問用什麼方法可以實(shí)現(xiàn)?

回答
編輯回答
巴扎嘿

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

const str = "SegmentFault是一個(gè)好論壇"
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)該不好處理,因?yàn)楸黄ヅ涞降膬?nèi)容相當(dāng)于被消耗掉了,不會(huì)匹配兩次。
如果是js的話,可以這么寫

var str="SegmentFault是一個(gè)好論壇";
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