使用 javascript 拆分具有正则表达式外观的字符串
Split a string with regular expression lookarounds using javascript
如果前一个字符不等于下一个字符,我想使用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"]
所以我想找一个表达式来找到它的lookback不等于lookahead的两个字符的分隔符。
但是我试过了,还是不行:
const result = 'aaabbcccd'.split(/(?<!)(?=.)/);
console.log(result); // ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd']
那么有正则表达式可以实现吗?或者用正则表达式根本不可能做到这一点?
使用反向引用,您可以使用 .match()
而不是 .split()
来获得您想要的结果,如下所示:
const r1 = 'abcd'.match(/(.)*/g);
const r2 = 'aaabbcccd'.match(/(.)*/g);
console.log(r1); // ['a', 'b', 'c', 'd']
console.log(r2); // ['aaa', 'bb', 'ccc', 'd']
这将匹配任意字符 (.)
,后跟相同字符
零次或多次
如果前一个字符不等于下一个字符,我想使用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"]
所以我想找一个表达式来找到它的lookback不等于lookahead的两个字符的分隔符。
但是我试过了,还是不行:
const result = 'aaabbcccd'.split(/(?<!)(?=.)/);
console.log(result); // ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd']
那么有正则表达式可以实现吗?或者用正则表达式根本不可能做到这一点?
使用反向引用,您可以使用 .match()
而不是 .split()
来获得您想要的结果,如下所示:
const r1 = 'abcd'.match(/(.)*/g);
const r2 = 'aaabbcccd'.match(/(.)*/g);
console.log(r1); // ['a', 'b', 'c', 'd']
console.log(r2); // ['aaa', 'bb', 'ccc', 'd']
这将匹配任意字符 (.)
,后跟相同字符 零次或多次