匹配零次或多次不能正常工作以进行零匹配

时间:2013-07-01 12:00:38

标签: javascript regex

我正在尝试从这两种类型的网址中获取网址和链接文字:

<a href="http://www.example.com">Example</a>
<a href="http://www.example.com" rel="nofollow">Example</a>

起初我有这个:

text = text.replace(/<a href="(.*)">(.*)<\/a>/gim, "[$2]($1)");

但是,对于第二个示例,rel="nofollow"中包含$2。我改成了:

text = text.replace(/<a href="(.*)"( rel=".*"{0,})>(.*)<\/a>/gim, "[$3]($1)");

现在,rel="nofollow"链接很完美,但第一个示例根本不匹配。

{0,}应表示“匹配rel=".*" 0次或更多次”。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

你的表达说“找一个报价零次或多次;”

使用:

text = text.replace(/<a href="([^"]*)"[^>]*>(.*?)<\/a>/gim, "[$3]($1)"); 

答案 1 :(得分:1)

jQuery解决方案:

var text_html_string = '<a href="http://www.example.com">Example</a>';
$(text_html_string).attr('href'); // http://www.example.com
$(text_html_string).text(); // Example
没有jQuery的

编辑

var d = document.createElement('div');
d.innerHTML = '<a href="http://www.example.com">Example</a>';
d.getElementsByTagName('a')[0].href; // http://www.example.com