我遇到了一些我以前没见过的东西,谷歌没有用,因为它一直在我的搜索中删除\"
。
首先,\"
是什么意思?我正在访问API,并且对于其中一个键的值,它是一串标记,但是如果其中一个标记有两个单词,则使用\"
来表示标记是两个单词。以下示例
"foo bar baz \"taz foo\" goo too loo"
我正在尝试将它们分成像["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]
但是,我有一段时间搞清楚如何捕获\"
并制作它,以便我可以将它们分割成如上所述的数组。
答案 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"]