使用JavaScript

时间:2018-01-26 21:27:11

标签: javascript regex

我想分割一个字符串,其中分隔符是一个管道。 但管道可以逃逸而不是分裂。

示例:

'aa|bb|cc'.split(/*??*/) // ['aa','bb','cc']
'aa\|aa|bb|cc|dd\|dd|ee'.split(/*??*/) // ['aa|aa', 'bb', 'cc', 'dd|dd', 'ee']

我试试这个,但它在javascript中无效:(?<!\\)[\|]

3 个答案:

答案 0 :(得分:2)

试试这个:

&#13;
&#13;
    console.log('aa|bb|cc'.split('|'));
    console.log('aa\|aa|bb|cc|dd\|dd|ee'.split('|'));
&#13;
&#13;
&#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}`);
});

}

希望这对你有所帮助。