使用引号将正文匹配时,正则expression式不会省略引号

我试图在node.js中用正则expression式在双引号内进行非贪婪的捕获。 大部分的Google结果都说我应该使用下面的一个:

"(.*?)" "([^"]*)" 

我试了两个,但我的代码不会删除引号。 我的代码看起来如此:

 var testStr = '|> "Song" by "Artist" on "Album" <3'; var regex = /"([^"]*)"/g; // or /"(.*?)"/g var info = testStr.match(regex); if (info){ console.dir(info[0]); console.dir(info[1]); console.dir(info[2]); } 

我的输出是这样的:

 '"Song"' '"Artist"' '"Album"' 

我究竟做错了什么?

match方法返回一个刚刚匹配的数组。 参见MDN :

被捕获的组不被返回。

一个修复就是使用exec

 var re = /"(.*?)"/g; var str = '|> "Song" by "Artist" on "Album" <3'; while ((m = re.exec(str)) !== null) { document.getElementById("res").innerHTML += m[1] + "<br />"; } 
 <div id="res"/> 

你的正则expression式正在寻找和匹配引号。 您可以这样做来修改匹配的值以有效修剪引号。

 var testStr = '|> "Song" by "Artist" on "Album" <3'; var regex = /"([^"]*)"/g; // or /"(.*?)"/g var info = testStr.match(regex).map(function (o) { return o.substr(1,o.length-2) }); if (info){ console.dir(info[0]); console.dir(info[1]); console.dir(info[2]); } 

你可以给这个镜头。 这应该包括引号中的所有内容,但不包括引号本身 –

 /(?<=")[^" ]*(?=")/