【问题标题】:Censoring words in textarea that are equal to array`s words审查文本区域中等于数组单词的单词
【发布时间】:2017-12-18 14:00:50
【问题描述】:

我想获得一些帮助来完成这项任务。 我需要批评文本区域中与我的数组中的单词相似的单词。除了批评部分,一切都很好!它应该覆盖像(汽车应该是***)这样的谴责词中的每个字母,但不幸的是它像一个*一样覆盖它。 也许 indexOf 在这里有用吗?等待答案

看起来像这样: enter image description here

这是我希望您改进的代码:

<script>
    var words = ["meat", "lol"];
    document.querySelector('.container p').innerHTML = words.join(" ");
    document.getElementById('btnAdd').onclick = function () {
            words.push(document.getElementById('newWord').value);
            document.querySelector('.container p').innerHTML = words.join(" ");
        }
        //Replacing
    document.getElementById('btnCensura').onclick = function () {
            var str = document.getElementById('tArea').value;
            for (var i = 0; i < words.length; i++) {
                if (str.match(words[i])) {
                    str = str.replace(words[i], "*");
                }
            }
            document.getElementById('tArea').value = str;
        }
</script>

【问题讨论】:

  • str = str.replace(words[i], "*".repeat(words[i].length));
  • 也不要打扰调用匹配。它实际上降低了效率
  • @4castle 谢谢队友,对我帮助很大

标签: javascript arrays string replace


【解决方案1】:

普通.replace只替换第一次出现,如果要替换textarea中所有匹配的文本,请使用正则表达式

document.getElementById('btnCensura').onclick = function() {
  var str = document.getElementById('tArea').value;
  for(var i = 0; i < words.length; i++) {
    var re = new RegExp(words[i], "g");
    str = str.replace(re, "*".repeat(words[i].length));
  }
  document.getElementById('tArea').value = str;
}

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    相关资源
    最近更新 更多