Javascript 只导致最后一次出现的正则表达式
我的正则表达式字符串Javascript 只导致最后一次出现的正则表达式,javascript,regex,Javascript,Regex,我的正则表达式字符串/(?:(?!.*\2))+\1/g用于查找两个字符,它们之间没有重复字符。例如,“aba”或“abcadea”有效,而“abcba”无效,因为b在两个a中出现两次。本质上,a的作用是作为一个边界,不应在其中重复任何字符 我遇到的问题是,它不能正确地识别所有发生这种情况的地方。举个例子: var s = "abababab"; s.match(/(.)(?:(.)(?!.*\2))+\1/g) ["bab"] //aba is also a valid occurrence
/(?:(?!.*\2))+\1/g
用于查找两个字符,它们之间没有重复字符。例如,“aba”或“abcadea”有效,而“abcba”无效,因为b在两个a中出现两次。本质上,a的作用是作为一个边界,不应在其中重复任何字符
我遇到的问题是,它不能正确地识别所有发生这种情况的地方。举个例子:
var s = "abababab";
s.match(/(.)(?:(.)(?!.*\2))+\1/g)
["bab"] //aba is also a valid occurrence
var s = "aba"
s.match(/(.)(?:(.)(?!.*\2))+\1/g)
["aba"] //it works on the string by itself
另一个我认为相关的问题是,它只能找到最短的匹配项,例如:
var s = "abcadefa";
s.match(/(.)(?:(.)(?!.*\2))+\1/g)
["abca"] //should also result abcadefa as a valid string
我无法在我的正则表达式查询中找到错误所在。任何帮助都会很好 以下是regex调试器结果,请注意“右侧的解释面板,用于分解每个正则表达式符号。因此
TabcdeT
是有效的,但是TabcdeaT
不是因为T
之间重复的a
?问题在于前瞻性。每当您有一个reption时,它就会失败,这是正确的,但它不会在\1
处停止。在示例<代码>“ABCADEFA”< /C>中,当它检查中间的“A”时,它会在结尾处发现“A”,这是不允许的,并回溯到先前的状态。另一个问题是,字符串“ABCDEFEF”只会导致“FAEF”,因为在第一个“F”子串“ABCDEDA”之后没有任何替换。这可能对您有效,但会被丢弃,因为当引擎检查“e”时,它会找到一个代表。因此,我认为主要的问题是,前瞻太贪婪,没有在您的\1
处停止,这导致所描述的情况失败