给定以下任何字符串,其中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。
/^(.*?)\((.*)\)$/
答案 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;">
<h2>hello Astaxie!</h2>
</pre>
</body>
</html>
答案 3 :(得分:0)
这也可以通过简单的split
和for
循环完成。
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()