我解決了字符串中標記替換的問題,例如: 「Hello,#name!」應評價爲:「你好,約翰!」 我測試了基於regexp的算法,它工作正常。問題是,當我嘗試添加標籤動態搜索它不知何故解析。 所有代碼:正則表達式不解析
var replaceTags = function(str, tags) {
var tagPattern = { search: "(^|[^#])((##)*)#", copy: "$1$2" };
var result;
var tagNames = Object.keys(tags);
for(var i = 0; i < tagNames.length; i++) {
var subDollarEscaped = tags[tagNames[i]].replace(RegExp("\\$", "g"), "$$$$");
result = str.replace(RegExp(tagPattern.search + tagNames[i], "g"), tagPattern.copy + subDollarEscaped);
}
result = result.replace(RegExp("##", "g"), "#");
return result;
};
的問題是在這條線:
result = str.replace(RegExp(tagPattern.search + tagNames[i], "g"), tagPattern.copy + subDollarEscaped);
不知怎的,字符串是不正確連接在一起。例如,將此行更改爲:
result = str.replace(RegExp(tagPattern.search + "name", "g"), tagPattern.copy + subDollarEscaped);
根據doc Object.keys()應該返回字符串數組,但它看起來好像沒有。我做了控制檯輸出,以確保爲標籤「名」
tagPattern.search + tagNames[i]
真正的計算結果爲
(^|[^#])((##)*)#name
所以我真的很困惑。
tagNames [i]到字符串的不同會話也不起作用。 –
你的函數永遠不會使用'str',並且'result'永遠不會被設置爲除自身替換之外的值。第三行是否應該讀取'var result = str;'或其他內容? – ClasG
噢,對不起,在我的真實版本中它使用str的原因,我已經改變了示例 –