我想使用正则表达式在javascript中拆分字符串。
输入: key1(name1,val1)key2(val2)
预期输出:
如果我使用这个'key1(name1,val1)key2(val2)'.match(/[^\(\)]+/g)
它对上面的字符串工作正常,但对于转义的括号则失败。
例如:以下输入'key1(name\(1,val1)key2(val\)2)'.match(/[^\(\)]+/g)
失败。
我想允许\)和\(在输入值中,分割时不应该考虑它。
我希望输出结果如下:
如何使用正则表达式实现它?
答案 0 :(得分:0)
您可以使用:
var re = /([^(]+)\(([^)]+)\)/g,
matches = [],
input = "key1(name1,val1)key2(val2)";
while (match = re.exec(input)) { matches.push(match[1]); matches.push(match[2]) };
console.log(matches);
//=> ["key1", "name1,val1", "key2", "val2"]
答案 1 :(得分:0)
我猜你也可以这样做
包含换行符:
# (?:[^()\\]+|\\[\S\s])+
(?: [^()\\]+ | \\ [\S\s] )+
排除换行符:
# (?:[^\n()\\]+|\\.)+
(?: [^\n()\\]+ | \\ . )+
Perl测试用例
$/ = undef;
$str = <DATA>;
while ( $str =~ /(?:[^\n()\\]+|\\.)+/g )
{
print "'$&'\n";
}
__DATA__
key1(name1,val1)key2(val2)
key3(name\(3,val3)key4(val4)
输出&gt;&gt;
'key1'
'name1,val1'
'key2'
'val2'
'key3'
'name\(3,val3'
'key4'
'val4'
答案 2 :(得分:0)
这个怎么样:
result = subject.match(/(?:\\.|[^()])+/g);
<强>解释强>
(?: # Start a non-capturing group that matches...
\\. # either an escaped character
| # or
[^()] # any character except parentheses
)+ # one or more times.