【发布时间】:2019-07-10 17:46:54
【问题描述】:
我正在尝试使用正则表达式构建查找和删除类型功能。我能够达到可以删除字符串的地步,但发现无法删除带有字符的字符串。当使用诸如var word = "is" 之类的普通字符串时,它似乎工作正常,直到遇到.,然后我得到奇怪的不需要的输出。
例如,在将字符合并到我要删除的字符串中时,还会出现一些其他不需要的情况(请注意下面代码中的 var word = "is." 而不是 is:
var myarray = ["Dr. this is", "this is. iss", "Is this IS"]
var my2array = []
var word = "is."
//var regex = new RegExp(`\\b${word}\\b`, 'gi');
var regex = new RegExp('\\b' + word + '\\b', 'gi');
for (const i of myarray) {
var x = i.replace(regex, "")
my2array.push(x)
}
myarray = my2array
console.log(myarray)
["Dr. this is", "this is. ", "this IS"]
这个 ^ 在几个方面是错误的(由于某种原因,iss 消失了,is. 仍然存在 - 这是我试图删除的主要字符串,最后一个索引中的第一个 is 消失了...... )
I.E.在这种情况下,我想要的输出是["Dr. this is", "this iss", "Is this IS"]
我也尝试过使用模板文字,从我注释掉的代码中可以看出。
目标是简单地从我的数组中删除 var word 中可能存在的任何值。该值是常规字符串、带有字符的字符串还是只是字符。 (当然在我的休息范围内)。
【问题讨论】:
-
.匹配正则表达式中的任何字符,它也不是单词字符。您可以将其转义为\.(即"is\\.")以使其匹配文字句点,但单词边界仍将位于它之前,而不是之后。 -
注意XY问题现象。你不应该断言一个可能的解决方案,必然会降低你获得最佳结果的机会。以阿努巴瓦的回答为例。
-
与问题无关,但您也可以使用
.map而不是 for+push。myarray = myarray.map(str => str.replace(regex, '')); -
您需要对字符串
word中的正则表达式特殊字符进行转义。请参阅:MDN Regular Expressions - Escaping 和 Escape string for use in Javascript regex
标签: javascript arrays regex