Javascript 要用带分组引号的空白分隔的regexp

Javascript 要用带分组引号的空白分隔的regexp,javascript,regex,Javascript,Regex,我尝试在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'] '

我尝试在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']

假设您有一个字符串:

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
实现同样的效果,但我认为代码更混乱

工作示例:(警告-警报)

要同时允许转义字符,您可以使用:

/"([^\\"]*(?:\\.[^\\"]*)*)"|'([^\\']*(?:\\.[^\\']*)*)'|(\S+)/g