我在JavaScript中有这个字符串我需要匹配:
"family name 1" [family name 2] "," firstname middlename
这会产生一个数组:
["family name 1", "[family name 2]", ",", "firstname", "middlename"]
因此,基本上用双引号或括号括起来的单词将被分割为短语,不在引号或括号内的单词将被视为单个单词或单个字符。
我目前有regex
:
.match(/(?:[^\s"]+|"[^"]*")+/g);
它似乎适用于双引号词,但不适用括号。
答案 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"]+|"[^"]*")+
我刚添加了对括号中的短语的额外检查:
\[[^\]]+\]