Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只导致最后一次出现的正则表达式_Javascript_Regex - Fatal编程技术网

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
处停止,这导致所描述的情况失败