使用正则表达式捕获`\“`并拆分成数组

时间:2016-05-16 00:17:16

标签: javascript arrays regex

我遇到了一些我以前没见过的东西,谷歌没有用,因为它一直在我的搜索中删除\"

首先,\"是什么意思?我正在访问API,并且对于其中一个键的值,它是一串标记,但是如果其中一个标记有两个单词,则使用\"来表示标记是两个单词。以下示例

"foo bar baz \"taz foo\" goo too loo"

我正在尝试将它们分成像["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]

这样的数组

但是,我有一段时间搞清楚如何捕获\"并制作它,以便我可以将它们分割成如上所述的数组。

2 个答案:

答案 0 :(得分:2)

使用String.prototype.replace()获取乐趣和利润:

var s = "foo bar baz \"taz foo\" goo too loo";

var arr = [];
s.replace(/[^\s"]+|"[^"]*"/g, function($1) {
  arr.push($1.replace(/"/g,''));
});

console.log(arr); // ["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]

创建一个空数组arr以将匹配推送到
使用replace收集$1个匹配:任何内容 [^\s"]+不是空格或双引号(一次或无限次)
|
"[^"]*" " "之间的任何内容[^"]不是引用*(零或无限次def strip_bullet_point(value) first_char = 0 value.each_char { |c| c =~ /[A-Za-z]/ ? break : first_char += 1 } value[first_char...value.length] end

答案 1 :(得分:1)

\"表示转义双引号字符。它被称为escape character

如果要在双引号的字符串中使用double,则必须使用转义字符。

比如说你想存储一个字符串abcd"xyz"abcd

console.log("abcd"xyz"abcd");

会给你一个错误,因为xyz之前的双引号标记字符串的结尾并在xyz标记新字符串的开头之后引用,因此由于语法不正确而发生错误。

因此,要在字符串中加上双引号,您必须

使用\"

转义双引号
console.log("abcd\"xyz\"abcd");

或将双引号放在单引号字符串

console.log('abcd"xyz"abcd');

至于你的分裂问题,你可以拆分正则表达式来获得这样的数组:

> "foo bar baz \"taz foo\" goo too loo".match(/\w+|(?:")[^"]*?(?:")/g);

["foo", "bar", "baz", ""taz foo"", "goo", "too", "loo"]

然后你可以迭代数组并删除双引号,如下所示:

> '"abcd xyz"'.replace(/"/g, '');
"abcd xyz"

合并代码:

> arr="foo bar baz \"taz foo\" goo too loo".match(/\w+|"[^"]*?(?=")/g);
["foo", "bar", "baz", ""taz foo", "goo", "too", "loo"]
> for(var i=0;i<arr.length;i++){arr[i]=arr[i].replace(/"/g, '');}
> console.log(arr);
["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]