从Javascript数组中删除带有字符的字符串

时间:2019-07-10 17:46:54

标签: javascript arrays regex

我正在尝试使用正则表达式构建查找和删除类型功能。我可以删除字符串,但是发现带有字符的字符串无法删除。使用正常的字符串,例如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中的任何值。值是常规字符串,带字符的字符串还是仅字符。 (当然,在我休息的时间范围内)。

1 个答案:

答案 0 :(得分:2)

正则表达式方法几乎没有问题:

  1. .是特殊的正则表达式字符,需要在您的单词中转义
  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)后断否定断言下一个字符不是非空格字符