我试图在JS中拆分字符串,如...
'a b c' => ['a','b','c']
'a bb cc dd' => ['a','bb','cc','dd]
'a "bb cc" dd' => ['a','bb cc', 'dd']
"a 'bb cc' dd" => ['a','bb cc', 'dd']
我如何在JS regexp中执行此操作? 我试过了
/\w+|"(?:\\"|[^"])+"/g
但它返回......
'a b c' => ['a','b','c']
'a bb cc dd' => ['a','bb','cc','dd]
'a "bb cc" dd' => ['a','"bb cc"', 'dd']
"a 'bb cc' dd" => ['a','bb','cc', 'dd']
答案 0 :(得分:1)
假设您有一个字符串:
var s = "a b c 'd e f' g \"h i j\" k";
您可以使用以下方式轻松匹配令牌:
/"[^"]*"|'[^']*'|\S+/g
那种模式:
然而,结果标记将用引号括起来 以下是删除这些引号的示例:
var words = [];
s.replace(/"([^"]*)"|'([^']*)'|(\S+)/g,
function(g0,g1,g2,g3){
words.push(g1 || g2 || g3 || '');
});
这有一些技巧,但我们的想法是我们选择非空的组(这是一个假的值是JavaScript)。您可以使用exec
实现相同的目标,但我认为代码更加混乱。
工作示例:http://jsfiddle.net/snS62/(警告 - 提醒)
要同时允许转义字符,您可以使用:
/"([^\\"]*(?:\\.[^\\"]*)*)"|'([^\\']*(?:\\.[^\\']*)*)'|(\S+)/g