删除所有出现的单词

时间:2016-01-17 11:30:07

标签: javascript regex

我试图删除文本中出现的所有单词。单词保存在数组中 但是我没有删除它们,而是将原始文本恢复原状:

var text = "This is just a little test, to check if it works."
var words = ["this", "is", "a", "to", "if", "it"];

for (i = 0; i < words.length; i++) {
  text = text.replace(/words[i]/g, "")
}

alert(text); // result should be: just little test, check works.

这是一个小提琴:https://fiddle.jshell.net/y07qgooq/

3 个答案:

答案 0 :(得分:5)

在您的代码中,words[i]不会被解释为javascript语言,而是解释为正则表达式语言,并且只会匹配“wordsi”。 您可以通过以下方式制作正则表达式:

new RegExp("\\b" + words[i] + "\\b", "g")

我添加了\b字边界,以确保删除的字不是单词的一部分。

如果您想匹配前导“This”,您还需要添加不区分大小写的标记i

new RegExp("\\b" + words[i] + "\\b", "gi")

如果您没有标点符号,则使用以下替代方法会更有效:

ES6中的

text.split(" ").filter(word => words.indexOf(word) == -1).join(" ");
在ES6之前

text.split(" ").filter(function(word) { return words.indexOf(word) == -1; }).join(" ");

答案 1 :(得分:2)

您可以使用构造函数创建RegExp

text = text.replace(new RegExp(words[i], "g"), "");

你也可以检查@Aaron建议的字边界并忽略大小写

new RegExp("\\b" + words[i] + "\\b ", "gi")

答案 2 :(得分:1)

因为您正在替换实际文本words[i]。相反,您需要使用该文本生成正则表达式。

text = text.replace(new RegExp(words[i], "g"), "")