我有一些字符串,如" de456" " us7515",它是de / us和3到10位数。
我希望捕获所有这些并用超链接替换它们,除非它们已经在html标记内。
示例:
应该改变:
<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>
不应该改变:
<a href ="github.com/xxxxx/us1234> link </a> => <a href ="github.com/xxxxx/us1234> link </a>
应该部分改变
<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
匹配open html标签内的文本模式
<a href = "github.com/de456">
/<\s*\w.*\b(us\d{3,10}|de\d{3,10})\b.?>/ig
所以我可以使用jquery regex exec和string.replace来做1和2,但我不知道怎么做3。 请指教。非常感谢你提前。
答案 0 :(得分:1)
答案 1 :(得分: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>"