我不知道正則表達式是這裏的工作的工具(解析器可能更合適),但我猜測一個簡單的解決辦法是剪掉標籤覆蓋的位,替換所有字,然後替換標籤。
var line = 'abc word hey :$ my word $: word :$ my word $:';
var tags = [];
var index = 0;
while (line.match(/:\$.*\$:/)) {
var start = line.indexOf(':$');
var end = line.indexOf('$:', start);
var tag = line.substring(start, end + 2);
line = line.replace(tag, '$tag' + index + '$');
tags.push(tag);
index++;
}
line = line.replace(/word/g, 'letter');
for (var i = 0; i < tags.length; i++) {
line = line.replace('$tag' + i + '$', tags[i]);
}
document.write('result ' + line)
此輸出:沿着該線(這將不支持嵌套的標籤,但原本應該工作)的東西
result abc letter hey :$ my word $: letter :$ my word $:
什麼方式,你都試過?什麼地方出了錯?你能發佈一個現場演示來重現這個問題嗎? – elclanrs
僅供參考,'Javascript'和'Java'不相關,所以不要用'Java'標記'Javascript'問題。 – Thor84no
這對於正則表達式來說會非常困難。最好你寫一個小解析器。 – Reeno