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来查找执行拆分操作所需的位置(例如,^|(?