正则表达式匹配逗号分隔的字符串

时间:2016-09-16 16:42:20

标签: javascript regex

给定以下任何字符串,其中operator和value只是占位符:

"operator1(value)"
"operator1(value), operator2(value)"
"operator1(value), operator2(value), operator_n(value)"

我需要能够匹配,所以我可以获得每个运算符及其值如下:

[[operator1, value]]
[[operator1, value], [operator2, value]]
[[operator1, value], [operator2, value], [operator_n, value]]

请注意:给定字符串中可能有n个运算符(以逗号分隔)。

我当前的尝试将匹配operator1(value),但不会与多个运营商匹配。有关结果,请参阅regex101

/^(.*?)\((.*)\)$/

5 个答案:

答案 0 :(得分:1)

您应该可以使用全局标记使用单个正则表达式执行此操作。

var re= /(?:,\s*)?([^(]+?)\(([^)]+)\)/g;
var results = re.exec(str);

查看Regex 101的结果:https://regex101.com/r/eC3uK3/2

答案 1 :(得分:1)

这是一个纯正的正则表达式回答这个问题,只要你的变量总是用a和空格分隔,它就可以工作,而不应该在没有多少问题的情况下遍历行

https://regex101.com/r/eC3uK3/4

([^\(]*)(\([^, ]*\))(?:, )?(?:\n)?

Matches on: 

operator1(value), operator2(value), operator_n(value), 
operator1(value), operator2(value)

说明:

因此,这会设置2个捕获组和2个非捕获组。

第一个捕获组将匹配值名称,直到括号(通过使用否定集和贪婪)。第二个捕获组将获取括号和值名称,直到找到括号的末尾(注意,您可以通过转义括号的外部集而不是内部来取消括号(示例:https://regex101.com/r/eC3uK3/6) 。非捕获组中有一个可选的“,”,另一个非捕获组中有一个可选的“\ n”来处理你可能遇到的任何换行符。

这会将您的数据分解为:

'Operator1'
'(value)'
'operator2'
'(value)'

尽可能多。

答案 2 :(得分:0)

您可以先拆分然后使用正则表达式来执行此操作:

<html>
<head></head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">
&lt;h2&gt;hello Astaxie!&lt;/h2&gt;
</pre>
</body>
</html>

答案 3 :(得分:0)

这也可以通过简单的splitfor循环完成。

var data = "operator1(value), operator2(value), operator_n(value)",
    ops = data.substring(0, data.length - 1), // Remove the last parenth from the string
    arr = ops.split(/\(|\), /),
    res = [], n, eN = arr.length;
for (n = 0; n < eN; n += 2) {
    res.push([arr[n], arr[n + 1]]);
}
console.log(res);

代码从字符串创建一个展平的数组,然后将“operator”/“value”对的数组嵌入到结果数组中。适用于旧版浏览器。

答案 4 :(得分:0)

以下函数“check”将实现您的目标,如果您想要一个字符串而不是结果数组,只需在函数返回的数组上使用//call full page function with options. $('#fullpage').fullpage({ anchors:['anchor-1','anchor-2'], controlArrows: false, }); 方法。

.toString()