Удалить строку с символами из массива Javascript - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь создать функцию поиска и удаления типов с помощью регулярных выражений.Я смог добраться до точки, где я мог удалить строки, но обнаружил, что строки с символами не могут быть удалены.Когда, используя обычную строку, такую ​​как 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 в последнейИндекс пропал ...)

То есть, мой желаемый результат в этом случае будет ["Dr. this is", "this iss", "Is this IS"]

Я также попытался использовать литерал шаблона, как видно из моего закомментированного кода.

Цель состоит в том, чтобы просто удалить из моего массива все, что может быть значением в var word. Является ли значение обычной строкой, строкой с символами или просто символами. (И, конечно, в рамках разрывовУ меня есть).

1 Ответ

2 голосов
/ 10 июля 2019

Существует несколько проблем в подходе регулярных выражений:

  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) имеет отрицательный взгляд, утверждая, что следующий символ не является непробельным символом
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...