使用引号将正文匹配时,正则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]); }
你可以给这个镜头。 这应该包括引号中的所有内容,但不包括引号本身 –
/(?<=")[^" ]*(?=")/