用JS替换网页中的单词

时间:2018-06-22 23:28:07

标签: javascript regex

我试图制作一个Firefox扩展程序,以过滤出cuss单词,作为测试,我尝试过滤掉“ 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");
    };
};

我顺便用了别人的代码

1 个答案:

答案 0 :(得分:1)

所有这些代码似乎比必要的工作还要多。使用正则表达式尝试一些更简单的操作。例如,/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);
  })
})

看看这个codepen来玩