【问题标题】:JavaScript string replace() not working when replacing variable替换变量时JavaScript字符串replace()不起作用
【发布时间】: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


【解决方案1】:

您的多行 server.responseText 存在一些问题。 我用空格而不是换行符替换了输入,并且所有替换都可以正常工作:

http://jsfiddle.net/XTdgJ/1/

【讨论】:

  • 好的,所以我在创建正则表达式之前在每一行上调用了 trim() (以清理它们),它现在似乎正在工作。我以为我之前已经尝试过了,但我想没有。
  • @scae 换行符通常也很难在控制台中检测到!
猜你喜欢
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多