正则表达式,要怎麽从下一个字开始匹配,而不是从下一个词?

发布于 2022-09-07 19:25:44 字数 223 浏览 21 评论 0

使用正则表达式时,发现匹配都会从以匹配到的词的下一个词开始,请问要怎么让他依照字串index顺序去找查?

比如: "SegmentFault是一个好论坛"

我写正则表达式: [x{4e00}-x{9fa5}]{2}

可以匹配到 : "是一" "个好" "论坛"

但我今天想匹配到 : "是一" "一个" "个好" "好论" "论坛"

请问用什麽方法可以实现?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我们只是彼此的过ke 2022-09-14 19:25:44

单纯用正则的话,应该不好处理,因为被匹配到的内容相当于被消耗掉了,不会匹配两次。
如果是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--;
}

图片描述

甜味拾荒者 2022-09-14 19:25:44

递归

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);
甜尕妞 2022-09-14 19:25:44

不同语言有不同处理方式,在 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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文