Javascript 用JS替换网页中的单词

Javascript 用JS替换网页中的单词,javascript,regex,Javascript,Regex,我曾试图制作一个Firefox扩展来过滤脏话,作为测试,我让它尝试过滤掉“the”这个词,并用“!@#$”替换它,但当我运行它时,什么也没发生,我不知道为什么。有人能帮忙吗?这是我的密码: function replaceText(selector, text, newText, flags) { var matcher = new RegExp(text, flags); var elems = document.querySelectorAll(selector), i; fo

我曾试图制作一个Firefox扩展来过滤脏话,作为测试,我让它尝试过滤掉“the”这个词,并用“!@#$”替换它,但当我运行它时,什么也没发生,我不知道为什么。有人能帮忙吗?这是我的密码:

function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  var elems = document.querySelectorAll(selector), i;

  for (i = 0; i < elems.length; i++)
    if (!elems[i].childNodes.length)
      elems[i].innerHTML = elems[i].innerHTML.replace(matcher, newText);
}

var selectorsToUse = ["p", "h1", "h2", "h3", "h4", "h5", "h6", "a", ];
var curseWords= [["the" "!@#$"]]

for(curseRegex = 0; curseRegex < curseWords.length; curseRegex++;)
{
    for(i = 0; i < selectorsToUse.length; i++)
    {
        replaceText(selectorstouse[i], cursewords[curseregex][0],
        curseWords[curseRegex][1], "gi");
    };
};
函数替换文本(选择器、文本、新文本、标志){
var matcher=newregexp(文本、标志);
var elems=document.querySelectorAll(选择器),i;
对于(i=0;i

顺便说一句,我使用了其他人的代码来实现这个函数。所有这些代码似乎都比需要做的工作要多一些。使用正则表达式尝试更简单的方法。例如,
/the/ig
。表达式(在本例中仅为一个单词)写在正斜杠之间。小
i
不区分大小写,因此“The”、“The”、“The”和任何其他组合将始终匹配。小的
g
用于全局,因此您可以获取当前字符串中“The”的所有实例。如果要添加更多单词,只需添加一个
|
加上下一个单词,如
/the | dog/ig
。你想说多少个字就说多少个字<代码>/the | dog | cow | cat/ig

试试这个:

const curses = /the/ig
const filterStr = '!@#$'
const selectors = ['p', 'h1', 'a']

selectors.forEach(selector => {
  const elements = [...document.querySelectorAll(selector)] //convert node list to array
  elements.forEach(el =>
    el.textContent = el.textContent.replace(curses, filterStr))
})
或ES5,如果您愿意:

var curses = /the/ig;
var filterStr = '!@#$';
var selectors = ['p', 'h1', 'a'];

selectors.forEach( function(selector) {
  var elements = document.querySelectorAll(selector);
  elements = Array.prototype.slice.call(elements); //convert node list to array
  elements.forEach( function(el) {
    el.textContent = el.textContent.replace(curses, filterStr);
  })
})
看看这个游戏
这里面有多个语法错误,例如
for
循环中选择code>,然后选择或使用
而不是
选择器或使用
。首先尝试修复:)在
curseWords=[[“逗号应该在这里*/”!@#$“]]
中缺少一个逗号,没问题!很高兴我能帮忙如果这解决了你的问题,你会接受这个答案吗?这对我有点帮助很抱歉打扰您,但是对于您给我的代码,有时我必须重新加载页面,以便它加载。当我单击帖子时,这种情况会发生在Reddit上。不确定它是否发生在其他地方。您知道为什么吗?我有一种预感,Reddit正在动态加载内容。此代码将在页面加载时运行一次,但如果在初始加载之后加载了某些内容,则不会影响这一点。要让代码对任何ajax调用做出通用的反应可能非常困难,但您可能要做的一个变通方法是在循环中连续运行代码。请小心,因为如果添加太多,循环可能会非常慢。假设您将上述所有代码包装在一个名为
filterCurses()
try
setInterval(filterCurses,500)