使用正则表达式捕获“”并分割成阵列

Using regex to capture `"` and split into array

本文关键字:分割 阵列 正则表达式      更新时间:2023-09-26

我遇到了一些以前从未见过的东西,谷歌没有用,因为它不断从我的搜索中删除'"

首先,'"是什么意思?我正在访问一个API,对于键的值之一,它是一个标签字符串,但如果其中一个标签有两个单词,它将使用'"来显示该标签是两个单词。下的示例

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

我正试图把它们分成一个数组,就像["foo", "bar", "baz", "taz foo", "goo", "too", "loo"] 一样

然而,我很难弄清楚如何捕获'"并制作它,这样我就可以将它们分割成如上所述的阵列。

使用String.protype.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"]+不是空白或双引号(一次或无限次)
|
"[^"]*" " "之间的任何非引用[^"](零或无限倍*

'"表示转义双引号字符。它被称为逃跑角色。

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

例如,假设要存储字符串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"]