使用 javascript 使用正则表达式环视拆分字符串

Hao*_* Wu 1 javascript regex regex-lookarounds

String.prototype.split如果前一个字符不等于下一个字符,我想用来拆分字符串,这是目标结果:

'abcd' => ['a', 'b', 'c', 'd']

'aaabbbccd' => ['aaa', 'bbb', 'cc', 'd']

我知道可以仅通过以下方式拆分字符串lookbacks

const result = 'aaabbbccd'.split(/(?<=a)/);
console.log(result);  // ["a", "a", "a", "bbbccd"]
Run Code Online (Sandbox Code Playgroud)

所以我想找到一个表达式来找到它的回溯不等于向前看的两个字符的分隔符。

但我试过这个,它不起作用:

const result = 'aaabbcccd'.split(/(?<!\2)(?=.)/);
console.log(result);  // ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

那么是否有正则表达式来实现这一目标?或者用正则表达式根本不可能做到这一点?

Nic*_*ons 5

使用反向引用,您可以使用.match()代替.split()来获得所需的结果,如下所示:

const r1 = 'abcd'.match(/(.)\1*/g);
const r2 = 'aaabbcccd'.match(/(.)\1*/g);
console.log(r1); // ['a', 'b', 'c', 'd']
console.log(r2); // ['aaa', 'bb', 'ccc', 'd']
Run Code Online (Sandbox Code Playgroud)

这将匹配任何字符(.),后跟相同字符\1零次或多次