2

我对 RegEx 表达式很陌生,问题是我想使用 RegEx 拆分具有某些条件的字符串。假设我想用逗号分隔,但如果它后面没有某些特定的东西。以下示例显示了所有内容:

str = "a , b=10 , c=add(3,b) , d"
certainThings = ["add" , "sub"]

str.split(',')仅用逗号分割的输出是: ["a" , "b=10" , "c=add(3" , "b)" , "d"].

但我不想在第三个逗号上拆分,因为它后面是certainThings数组的元素之一。

预期输出为:["a" , "b=10" , "c=add(3,b)" , "d"].

如果先验包含certainThings数组的一个元素,则可能的解决方案可能是用逗号分隔并连接两个元素。但我认为 RegEx 表达式应该有更好的方法来做到这一点。

4

2 回答 2

2

假设您只需要担心在单嵌套括号内排除逗号,我们可以尝试拆分以下正则表达式模式:

\s*,\s*(?![^(]*\))

这表示以逗号分隔,两边都被可选的空格包围,只要我们不能向前看并且遇到右括号)而不首先看到一个左括号。这个逻辑排除了里面的逗号,因为那个特殊的逗号在没有看到开头的情况下打了第一个。(c=add(3,b))(

var str = "a , b=10 , c=add(3,b) , d"
parts = str.split(/\s*,\s*(?![^(]*\))/);
console.log(parts);

于 2020-03-18T15:32:59.723 回答
0

除了用逗号分割,您还可以选择不是逗号的所有内容:

const str = "a , b=10 , c=add(3,b) , d";
const regex = /(?:\([^)]*\)|[^,])+/g;

console.log(
  str.match(regex).map(str => str.trim())
);

正则表达式图

于 2020-03-18T16:46:55.500 回答