【发布时间】:2012-09-10 06:39:30
【问题描述】:
我正在尝试创建一个 JavaScript 脚本来突出显示页面上的某些文本。现在我在尝试用其他文本替换文本(来自正文 html)时遇到问题。我想用一些其他文本替换数组highlights 中每个项目的所有实例。
我使用的代码是:
var responseText = server.responseText;
var highlights = responseText.split("\n");
var text = document.body.innerHTML;
for (i in highlights) {
if (highlights[i].length > 1) {
var exp = new RegExp(highlights[i], "g");
console.log(exp);
console.log(highlights[i]);
text = text.replace(exp, "XXXXXXXXXXX");
}
}
document.body.innerHTML = text;
目前,我得到了highlights[i] 的正确值打印输出,我想我是正则表达式exp;如果highlights[i] 是“记住”,那么我为exp 得到的打印输出是“/Remember/g”(不带引号)——但它不会替换页面上的“记住”这个词。 '如果我用简单的字符串“记住”替换new RegExp()中的highlights[i],它就可以正常工作。有什么想法吗?
编辑:
我解决了这个问题!创建RegExp() 时,我传入highlights[i].trim() 而不仅仅是highlights[i] 以消除开头/结尾的空白,它现在似乎正在工作。
【问题讨论】:
-
不要使用
for ..in遍历数组,使用常规的for循环。 -
/Remember/g有什么问题? -
你能通过现场演示重现这种行为吗? JS Fiddle,或类似的?
-
@Musa for...in 出了什么问题?有什么理由会弄乱替换()?
-
str.replace 将仅替换字符串的第一个元素,如果您不传递正则“正则表达式”:)
标签: javascript regex variables replace