我需要引号中的匹配字符串

I need match string in quotes

我需要匹配 "" 中的字符串,我正在使用它不工作

var str='"hi" hello "abc\nddk" ef "gh"';

console.log(str.match(/(?=")[^"]*?(?=")/));

t 给我的输出是

[]

我需要输出为

["hi", "abc\nddk", "gh"]

更新:

我可以使用正则表达式 "[^"]" 来匹配引号中的字符串,但我需要避免结果

中的 "

这应该可以解决问题:

/(?| (")((?:\"|[^"])+) | (')((?:\'|[^'])+) )/xg

Demo

顺便说一句:regex101.com 是一个很好的资源(这是我得到上面的正则表达式的地方)

更新

我发布的第一个作品适用于 PHP,here is one 适用于 JS

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

也许我没看懂你的问题,但这对我有用

/\".+\"/gm

https://regex101.com/r/wF0yN4/1

最简单的方法是:

/"[^"]*?"/g

这将 return 一个包含 "hi""abc\nddk""gh" 的数组,您可以对单个部分执行类似 piece.replace(/"/g, "") 的操作以摆脱"。如果你不喜欢那样,那么你可以做 search and don't replace

而不是 match
var matches = [];
str.replace(/"([^"]*?)"/g, function (_, match) {
    matches.push(match);
});