gpt4 book ai didi

javascript - 如何获取字符串的所有可能重叠匹配项

转载 作者:搜寻专家 更新时间:2023-11-01 04:52:11 25 4
gpt4 key购买 nike

我正在研究“哥德尔、埃舍尔、巴赫”第 2 章中的 MIU 系统问题。

规则之一

规则 III:如果 III 出现在您集合中的一个字符串中,您可以用 U 代替 III 创建一个新字符串。

这意味着字符串 MIII 可以变成 MU,但对于其他更长的字符串,可能有多种可能性[括号中的匹配项]:

  • MIIII 可以产生
    • M[III]I >> MUI
    • MI[III] >> MIU
  • MUIIIUIIIU 可以产生
    • MU[III]UIIIU >> MUUUIIIU
    • MUIIIU[III]U >> MUIIIUUU
  • MUIIIIU 可以产生
    • MU[III]IU >> MUUIU
    • MUI[III]U >> MUIUU

/(.*)III(.*)/ 之类的正则表达式显然很有用,但我似乎无法让它们生成所有可能的匹配项,只能生成第一个匹配项寻找。

有没有办法生成所有可能的匹配项?

(请注意,我可以想出完全手动执行此操作的方法,但我希望有更好的方法使用内置工具、正则表达式或其他方式)

(经过编辑以澄清重叠的需求。)

最佳答案

这是您需要的正则表达式:/III/g - 很简单,对吧?下面是您如何使用它:

var text = "MUIIIUIIIU", find = "III", replace "U",
regex = new RegExp(find,"g"), matches = [], match;
while(match = regex.exec(text)) {
matches.push(match);
regex.lastIndex = match.index+1;
}

regex.lastIndex... 行覆盖了不匹配重叠结果的通常正则表达式行为。我还使用 RegExp 构造函数来使其更加灵活。您甚至可以通过这种方式将其构建到一个函数中。

现在你有了一组匹配对象,你可以这样做:

matches.forEach(function(m) { // older browsers need a shim or old-fashioned for loop
console.log(text.substr(0,m.index)+replace+text.substr(m.index+find.length));
});

编辑: Here是一个演示上述代码的 JSFiddle。

关于javascript - 如何获取字符串的所有可能重叠匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com