javascript正则表达式将通过括号和双引号拆分单个单词和短语

时间:2014-01-29 06:15:16

标签: javascript regex

我在JavaScript中有这个字符串我需要匹配:

"family name 1" [family name 2] "," firstname middlename

这会产生一个数组:

["family name 1", "[family name 2]", ",", "firstname", "middlename"]

因此,基本上用双引号或括号括起来的单词将被分割为短语,不在引号或括号内的单词将被视为单个单词或单个字符。

我目前有regex

.match(/(?:[^\s"]+|"[^"]*")+/g);

它似乎适用于双引号词,但不适用括号。

3 个答案:

答案 0 :(得分:0)

请尝试下面的内容。

(?:[^\s"]+|"[^"]*")+

它适用于

"family name 1", "[family name 2]", ",", "firstname", "middlename"

您可以在regexpal.com中试用

如果这是您的要求,请告知我们,如果不是,请使用需要匹配的字符串更新问题。

答案 1 :(得分:0)

> re = /(?:"([^"]*)")|(?:\[([^\[\]]*)\])|(\S+)/g;
> s.match(re)

这会给你

[""family name 1"", "[family name 2]", "","", "firstname", "middlename"]

请注意,无法使用match删除引号和括号,您必须使用replace

result=[]
s.replace(re, function() { result.push(arguments[1]||arguments[2]||arguments[3]) })

答案 2 :(得分:0)

试试这个:

(?:\[[^\]]+\]|[^\s"]+|"[^"]*")+

我刚添加了对括号中的短语的额外检查:

\[[^\]]+\]