2013-07-01 90 views
1

我想從這些2種類型的URL的URL和鏈接文本:匹配零次或多次不爲零正常工作匹配

<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或更多次」。

我在做什麼錯?

+1

我認爲你應該使用jQuery或類似的東西,而不是重寫一個DOM解析器...... – pataluc

+1

@pataluc jQuery對於像這樣簡單的東西嚴重矯枉過正。我知道URL的格式是兩個例子之一。它不會包含任何其他屬性。 –

+0

我認爲給你的例子,你會進一步使用jQuery ... ^^我的壞。 – pataluc

回答

3

你的表情說:「找到一個報價零次或多次;)

使用:

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

我也嘗試過。它不起作用:http://i.stack.imgur.com/TXdBn.png –

+0

OUCH ...更新了代碼,再試一次...現在第1組匹配所有字符,但報價本身;) –

+0

完美,很棒的工作,謝謝! ':)' –

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 
+2

我不想爲一個4kb的用戶腳本添加一個237kb的巨獸。 –

+1

然後看看Zeptojs。這是一個**嚴重的輕量級jquery替代品,沒有那麼多的花裏胡哨。 –

+1

爲了簡單的RegEx更改,整合任何庫肯定是矯枉過正的(我提到我討厭框架?':p') –