[英]Using regex to capture `\"` and split into array
我接触过的东西,我以前从未见过的和谷歌是没有用的,因为它使删除\\"
从我的搜索。
首先,是什么\\"
是什么意思?我访问的API,并在关键的价值观之一,它是标记的字符串,但随后如果标签之一有两个词,它使用\\"
,以表明该标签是二话。 以下示例
"foo bar baz \\"taz foo\\" goo too loo"
我试图把它们分成像这样的数组["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]
然而,我有一个地狱的时间来弄清楚如何捕获\\"
并制作它,以便我可以将它们分成如上所述的数组。
使用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"]+
不是空格或双引号(一次或无限次)
|
要么
"[^"]*"
之间的任何东西" "
不是引用[^"]
(零或无限次*
)
\\"
意味着逃避双引号字符。它被称为转义字符 。
如果要在双引号的字符串中使用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"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.