我想分割一个字符串,其中分隔符是一个管道。 但管道可以逃逸而不是分裂。
示例:
'aa|bb|cc'.split(/*??*/) // ['aa','bb','cc']
'aa\|aa|bb|cc|dd\|dd|ee'.split(/*??*/) // ['aa|aa', 'bb', 'cc', 'dd|dd', 'ee']
我试试这个,但它在javascript中无效:(?<!\\)[\|]
答案 0 :(得分:2)
试试这个:
console.log('aa|bb|cc'.split('|'));
console.log('aa\|aa|bb|cc|dd\|dd|ee'.split('|'));
&#13;
答案 1 :(得分:2)
我假设你想跳过转义管道上的拆分。请改用match
:
console.log(
'aa\\|aa|bb|cc|dd\\|dd|ee'.match(/[^\\|]*(?:\\.[^\\|]*)*/g).filter(Boolean)
);
答案 2 :(得分:0)
我创建的正则表达式
https://www.regexpal.com/index.php?fam=100132
您需要做的是在数组中完成匹配
生成的代码看起来像这样......
const regex = /(([^\\\|]+)\\?\|\2)|(\w+)/g;
const str = `aa\\|aa|bb|cc|dd\\|dd|ee`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
希望这对你有所帮助。