JavaScript用文本中每个匹配的函数结果替换文本

时间:2011-04-18 21:09:44

标签: javascript replace

我正在尝试将textarea元素中的所有链接替换为该段文本的函数结果。

示例:


url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
Text = "Text with link inside www.stackoverflow.com";
text.replace(url, convert(RESULT));
document.write(text);

function convert(link){
  return " XX " + link + "XX";
}

我需要的是在该字符串中找到的每个链接都被转换为被XX或任何其他字符串包围。 事实是我需要将文本中的EACH链接发送到该函数,因此我可以替换它们中的每一个。

我一直在网上搜索几个小时。尝试了很多东西。什么都行不通。

关于如何做到这一点的任何想法?

提前致谢!

2 个答案:

答案 0 :(得分:2)

有一些问题。

  1. replace函数允许引用函数作为其第二个参数。您正在调用 convert函数,而不是传递引用。
  2. replace函数不会修改原始字符串。您需要保存其结果。
  3. 您在定义之前尝试使用convert
  4. 全部放在一起:

    function convert(link) {
        return " XX " + link + "XX";
    }
    var url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
    var text = "Text with link inside www.stackoverflow.com";
    text = text.replace(url, convert);
    

    输出:

    "Text with link inside XX www.stackoverflow.comXX"
    

答案 1 :(得分:1)

String#replace不会修改接收器,因为JavaScript中的字符串是不可变的。你想要这个:

url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g;
text = "Text with link inside www.stackoverflow.com";
text = text.replace(url, convert(RESULT));
document.write(text);

function convert(link){
  return " XX " + link + "XX";
}

此外,您引用了我已更正的Text而非text