Javascript 如何在一个或多个重复字符的模式上拆分字符串并保持匹配?

Javascript 如何在一个或多个重复字符的模式上拆分字符串并保持匹配?,javascript,regex,string,Javascript,Regex,String,例如,获取一个字符串abaaaaa,一个字符a,拆分字符串以获取['ab','aac','aaa'] string = 'abaacaaa' string.split('a') // 1. ["", "b", "", "c", "", "", ""] string.split(/(?=a)/) // 2. ["ab", "a", "ac", "a", "a", "a"] string.split(/(?=a+)/) // 3. ["ab", "a", "ac", "a", "a",

例如,获取一个字符串
abaaaaa
,一个字符
a
,拆分字符串以获取
['ab','aac','aaa']

string = 'abaacaaa'
string.split('a')      // 1. ["", "b", "", "c", "", "", ""]
string.split(/(?=a)/)  // 2. ["ab", "a", "ac", "a", "a", "a"]
string.split(/(?=a+)/) // 3. ["ab", "a", "ac", "a", "a", "a"]

string.split(/*???*/)  // 4. ['ab', 'aac', 'aaa']
为什么3rd表达式输出的值与2nd的值相同(即使
+
在a之后出现),以及在4th中输入什么


编辑:

string.match(/a+[^a]*/g)
babaacaa
中无法正常工作

string = 'babaacaaa'     // should be splited to ['b', 'ab', 'aac', 'aaa']
string.match(/a+[^a]*/g) // ["ab", "aac", "aaa"]
let string='abaacaa'
让result=string.match(/a*([^a]+|a)/g)
console.log(结果)
字符串='babaacaaa'
结果=字符串。匹配(/a*([^a]+|a)/g)

console.log(result)
解决方案2和3是相等的,因为未编排的lookahead测试输入中的每个位置。绳子
(?=a)
测试
abaacaa
中字符串的开头,并找到匹配项,前导的空结果将被丢弃。接下来,它在
a
之后进行尝试,由于右侧的字符是
b
,因此不匹配,正则表达式引擎将转到下一个位置。接下来,它在
b
之后匹配<代码>ab被添加到结果中。然后它匹配
a
之后的位置,将
a
添加到结果数组中,然后转到下一个位置以查找匹配项。等等使用
(?=a+
时,过程是不确定的,它只匹配1+
a
s,但仍然测试每个位置

要拆分
babaacaa
,您需要

var s='babaacaaa';
console.log(
s、 拆分(/(a+[^a]*)/)。筛选器(布尔值)

);
字符串。匹配(/^[^a]+|a+[^a]*/g)
似乎按预期工作。

您希望通过什么上下文将字符串拆分?我希望以图形方式将字符串旋转到最小值。例如,从
abaca
aabac
unchoredlookaheads测试输入字符串中的每个位置。因此,2=3。另外,
'abaacaa'。match(/a+[^a]*/g)
似乎与4一样有效。在python中,您还可以使用lookbehinds来查找执行拆分操作所需的位置(例如,
^|(?