在干草堆中更换非精确针

时间:2011-08-13 00:30:01

标签: javascript

您好我有一个Javascript函数可以替换大海捞针,因为您会看到干草堆是整个页面的主体。

function replace(needle, replacement) {
    haystackText = document.body.innerHTML
    var match = new RegExp(needle, "ig");     
    var replaced = "";
    replaced = haystackText.replace(match, replacement);
    document.body.innerHTML = replaced;
}

我的问题是我正在寻找的针头并不准确。例如,病人说针文是“foo”。我想要替换的文本可能看起来像这样。

Here is some example text abcfooxyz, that is all.

我需要替换abcfooxyz,但我知道要找的是foo。因此,如果替换文本是bar,我需要输出看起来像这样。

Here is some example text bar that is all.

我很抱歉,如果这很明显我已经搜索了解决方案,但javascript不是我的母语,但我被迫使用它来实现这个应用程序。我可以使用jQuery,但我不愿意,因为我还没有调用库,我不知道它。

感谢您的协助。

编辑:找到解决方案

好的,所以在对RegExp进行一些额外的阅读和实验之后,我已经编写了一个单独的函数来处理一个href html标签中的URL。这用于将使用rel =“noreferrer”继续和停止refferal和页面排名数据流之前将点击出站链接的用户重定向到警告页面。这里的bdy是java脚本documnet.body.innerHTML元素。

function linkreplace(link, bdy) {
    haystackText = bdy;
    var replacement = 'a href=\"http://mysite.com/outbound_refer.php?link=' + link + '\" rel=\"noreferrer\"';
    var match = new RegExp('[^\\<\\>]*' + link + '[^\\>\\<]*', 'ig');
    replaced = haystackText.replace(match, replacement);
    return replaced;
}

这里RegExp找到针文本并包含HTML标记内的所有文本,直到它找到标记打开和关闭。这里\&lt;和\&gt;设置表达式以查找&lt;的特殊字符。和&gt;所以&lt;&gt;在常规文本中不匹配。 ^设置Expression以匹配除括号中的字符之外的所有字符。

2 个答案:

答案 0 :(得分:2)

试试这个:

var match = new RegExp('(\\b)\\w*' + needle + '\\w*(\\b)', 'ig');
haystackText.replace(match, '$1' + replacement + '$2');

正则表达式的解释:

\b        word boundary (space, punctuation, etc)
\w*       0 or more alphanumeric characters
[needle]  your text
\w*       0 or more alphanumeric characters
\b        word boundary 

答案 1 :(得分:0)

以下内容将匹配由任意数量的字母数字字符包围的“foo”,包括零。

\w*foo\w*