【发布时间】:2013-08-03 05:08:09
【问题描述】:
我正在研究“哥德尔、埃舍尔、巴赫”第 2 章中的 MIU 系统问题。
规则状态之一
Rule III: If III occurs in one of the strings in your collection, you may make a new string with U in place of 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,包括重叠匹配,并将它们返回到数组中?
-
是的,根据示例。例如MIIII 应该有两个匹配项,用于 M[III]I 和 MI[III]。 (这些继续成为 MUI 和 MIU)。 Exec 看起来很有希望,但它不会处理重叠的情况。
-
RegExp.exec可以为您工作,但您需要使用匹配对象,如 Kolink 的回答所示。在这种情况下,indexOf可能更好,但正则表达式肯定更通用。 -
霍夫施塔特也在俄勒冈度过了一段时间,不是吗?
标签: javascript regex