您好我有一个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以匹配除括号中的字符之外的所有字符。
答案 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*