Javascript 要用带分组引号的空白分隔的regexp
我尝试在JS中拆分字符串,如..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'] '
'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