使用带有多个标记的javascript正则表达式拆分字符串并考虑转义分隔符

时间:2014-03-18 15:51:46

标签: javascript regex

我想使用正则表达式在javascript中拆分字符串。

输入: key1(name1,val1)key2(val2)

预期输出:

  • KEY1
  • NAME1,VAL1
  • KEY2
  • val2的

如果我使用这个'key1(name1,val1)key2(val2)'.match(/[^\(\)]+/g)它对上面的字符串工作正常,但对于转义的括号则失败。

例如:以下输入'key1(name\(1,val1)key2(val\)2)'.match(/[^\(\)]+/g)失败。

我想允许\)和\(在输入值中,分割时不应该考虑它。

我希望输出结果如下:

  • KEY1
  • 名\(1,VAL1
  • KEY2
  • VAL \)2

如何使用正则表达式实现它?

3 个答案:

答案 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);

live on regex101.com

<强>解释

(?:     # Start a non-capturing group that matches...
 \\.    # either an escaped character
|       # or
 [^()]  # any character except parentheses
)+      # one or more times.