首页 > 解决方案 > 正则表达式用 JavaScript 中的条件拆分逗号上的字符串

问题描述

我对 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 表达式应该有更好的方法来做到这一点。

标签: javascriptregexsplit

解决方案


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

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

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

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


推荐阅读