如何使我的捕获链接匹配“懒惰”?

时间:2012-08-17 22:03:24

标签: javascript regex replace

在ECMAScript中,这是我正在使用的正则表达式:

replace(/\[(.+)\s+->\s+([^\]]+)]/g, '<a class=adl_btnlnk href="$2">$1</a>');

对于以下字符串,这很好:

"[INNER\"',';!@#$%^&*gobbeldygook ->    -> -> http://li.nk?u=r&l]"

......它完全符合我的需要。但是我什么时候有:

"[INNER\"',';!@#$%^&*gobbeldygook ->    -> -> http://li.nk?u=r&l] laksjfalksdjf98723&*(*&(*@&#$ [foo -> http://li.nk]"

导致一个破碎的链接:

"<a class=adl_btnlnk href="http://li.nk">INNER"',';!@#$%^&*gobbeldygook ->    -> -> http://li.nk?u=r&l] laksjfalksdjf98723&*(*&(*@&#$ [foo</a>"

我怎样才能进入:

"<a class=adl_btnlnk href="http://li.nk?u=r&l">INNER"',';!@#$%^&*gobbeldygook ->    -></a> laksjfalksdjf98723&*(*&(*@&#$ <a class=adl_btnlink href="http://li.nk">foo</a>"

1 个答案:

答案 0 :(得分:1)

您可以通过附加+来尽量减少?量词。但是你必须稍微改变你的正则表达式,以便尽可能多地排除第一组的]个字符。此外,最后一组不应包括箭头:

/\[([^\]]+?)\s+->\s+([^->\]]+?)]/g