我正在尝试使用正则表达式构建查找和删除类型功能。我可以删除字符串,但是发现带有字符的字符串无法删除。使用正常的字符串,例如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
中的任何值。值是常规字符串,带字符的字符串还是仅字符。 (当然,在我休息的时间范围内)。
答案 0 :(得分:2)
正则表达式方法几乎没有问题:
.
是特殊的正则表达式字符,需要在您的单词中转义\b
之后,单词边界.
将不匹配您可以使用此基于正则表达式的解决方案:
var myarray = ["Dr. this is", "this is. iss", "Is this IS"]
var my2array = []
var word = "is."
// using lookahead and lookbehind instead of word boundary
var regex = new RegExp('\\s*(?<!\\S)' +
word.replace(/\W/g, "\\$&") + '(?!\\S)\\s*')
for (const i of myarray) {
var x = i.replace(regex, " ")
my2array.push(x)
}
myarray = my2array
console.log(myarray)
.replace(/\W/g, "\\$&")
将转义给定条件下的所有非单词字符
单词。(?<!\S)
后断后否定断言上一个字符不是非空格字符(?!\S)
后断否定断言下一个字符不是非空格字符