-6ren">
gpt4 book ai didi

javascript - 正则表达式用分组引号分隔空格

转载 作者:行者123 更新时间:2023-11-30 05:58:10 24 4
gpt4 key购买 nike

我曾尝试在 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 正则表达式中执行此操作?我试过了

/\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 实现同样的效果,但在我看来,代码更加困惑。

工作示例:http://jsfiddle.net/snS62/ (警告 - 警报)

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

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

关于javascript - 正则表达式用分组引号分隔空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com