你必須拉出html標籤,然後才能做替換,這樣你就不會混合的它裏面的標籤和其它A。
那麼你必須做出替代全球將產生正則表達式。
這是有點長,但這將工作,我敢肯定有人可以簡化解決方案。
var str = "asdf <a href='http://asdf.com'>asdfasdfasdf</a> <span class='asdf'>asdf</span>",
// strip all html tags
// $1 is used to hold reference to the spot
stripped = str.replace(/<[^<>]+>/g, '$1'),
// keep a reference to all stripped tags
split = str.match(/<[^<>]+>/g),
// highlight the a's with the html tags stripped
highlight = stripped.replace(/a/g, "<b>a</b>"),
// loop length
len = split.length;
// loop through every html tag reference '$1' and replace it back in
for(var x = 0; x<len; x++) {
highlight = highlight.replace("$1", split[x]);
}
JSFIDDLE
一個不太詳細的版本:
tags = str.match(/<[^<>]+>/g),
highlight = str.replace(/<[^<>]+>/g, '@@').
replace(/a/g, "<b>a</b>").
replace(/@@/g, function() { return tags.shift() });
http://jsfiddle.net/X9cZg/1/
你將不能夠做到這一點不改變的標記。 – Lix
使用DOM遍歷所有文本節點,並在那裏替換。 –