2014-10-27 22 views
0

我有一些字符串,如「de456」「us7515」,它是de/us和3到10位數字。正則表達式捕獲並替換html標籤外的文本模式

我希望捕獲所有這些文件,並用超鏈接替換它們,除非它們已經在html標籤內。

例如:

  1. 應該改變:

    <div> de485 </div> => <div> <a href = "xxx.com/de485">de485</a></div> 
    <span> i need us1234 </span> => <span> i need <a href = "xxx.com/us1234"> us1234 </a></span> 
    
  2. 不應改變:

    <a href ="github.com/xxxxx/us1234> link </a> => <a href ="github.com/xxxxx/us1234> link </a> 
    
  3. 應部分改變

    <a href ="github.com/xxxxx/us1234> us1234 </a> => <a href ="github.com/xxxxx/us1234> <a href = "xxx.com/us1234"> us1234 </a> </a> 
    

我已經寫了兩個正則表達式:

匹配文本模式:

de456 
us1234 

/\b(us\d{3,10}|de\d{3,10})\b/ig 

匹配文本模式中打開HTML標記內部

<a href = "github.com/de456"> 

/<\s*\w.*\b(us\d{3,10}|de\d{3,10})\b.?>/ig 

所以我可以做1 2通過使用jquery正則表達式exec和string.replace,但我不知道該怎麼做3. 請指教。非常感謝你提前。

+0

你不應該在html字符串中使用正則表達式替換字符串...而應該使用基於DOM元素的替換 – 2014-10-27 03:39:28

回答

0

下面的例子是足夠接近,但是,我不建議在實際應用中這樣做。

// matches all 3 cases 
var pattern = /([^/])((us|de)\d+)/ig; 

/* 1 */ 
'<span> i need us1234 </span>'.replace(pattern, '$1<a href="xxx.com/$2">$2</a>'); 
//=> "<span> i need <a href="xxx.com/us1234">us1234</a> </span>" 

/* 2 */ 
'<a href ="github.com/xxxxx/us1234> link </a>'.replace(pattern, '$1<a href="xxx.com/$2">$2</a>'); 
//=> "<a href ="github.com/xxxxx/us1234> link </a>" 

/* 3 */ 
'<a href ="github.com/xxxxx/us1234> us1234 </a>'.replace(pattern, '$1<a href="xxx.com/$2">$2</a>'); 
//=> "<a href ="github.com/xxxxx/us1234> <a href="xxx.com/us1234">us1234</a> </a>"