我试图删除文本中出现的所有单词。单词保存在数组中 但是我没有删除它们,而是将原始文本恢复原状:
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.
答案 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"), "")