Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式,用于在JavaScript中使用条件拆分逗号上的字符串_Javascript_Regex_Split - Fatal编程技术网

正则表达式,用于在JavaScript中使用条件拆分逗号上的字符串

正则表达式,用于在JavaScript中使用条件拆分逗号上的字符串,javascript,regex,split,Javascript,Regex,Split,我对正则表达式非常陌生,问题是我想使用正则表达式拆分带有某些条件的字符串。假设我想用逗号分开,但如果后面没有某些东西。以下示例显示了所有内容: str = "a , b=10 , c=add(3,b) , d" certainThings = ["add" , "sub"] str.split(',')只按逗号拆分的输出是:[“a”,“b=10”,“c=add(3”,“b)”,“d”] 但我不想在第三个逗号处拆分,因为它后面跟有certainThings数组的一个元素 预期的输出是:[“a”、

我对正则表达式非常陌生,问题是我想使用正则表达式拆分带有某些条件的字符串。假设我想用逗号分开,但如果后面没有某些东西。以下示例显示了所有内容:

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”]


一种可能的解决方案是,如果previor包含
certainThings
数组中的一个元素,则用逗号分割并连接两个元素。但我认为应该有更好的方法通过正则表达式来实现这一点。

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

\s*,\s*(?![^(]*\))
这意味着在逗号上拆分,两边都有可选的空格,只要我们不能向前看,遇到一个结束的
括号,而不首先看到一个开始的
one)。这个逻辑排除了
c=add(3,b)
中的逗号,因为特定的逗号碰到了一个
先看不到开头的

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

console.log(parts);
您也可以选择非逗号的所有内容,而不是使用逗号拆分:

const str=“a,b=10,c=add(3,b),d”; 常量正则表达式=/(?:\([^)]*\)|[^,])+/g; console.log( str.match(regex).map(str=>str.trim())
);如果在逗号前后确实有空空格,正如示例中所示,可以执行
str.split(',')
split,后面跟逗号,后面跟空格。第三个逗号后面不跟“add”或“sub”。请澄清。谢谢你的回答。实际上,在括号之间排除逗号是一个好主意,它完全可以工作,但仍然不检查括号前面的函数名(
add
,在上述示例中)是否存在于
certainThings
数组中。那么,是否也可以在我们的正则表达式中进行此测试?@BeHFaR这就是正则表达式需要停止的地方。如果您有这种类型的需求,您应该编写一个解析器。