Замените автономную строку регулярным выражением в Javascript

Я пытаюсь написать функцию для замены любого автономного набора совпадающих символов. Например:

var myarray = ["this is", "this is iss"]
var my2array = []
var regex = '/bis/b'

for (const i of myarray) {
  var x = i.replace(regex, "")
  my2array.push(x)
}

console.info(my2array)

Мой желаемый результат:

["this", "this iss"]

У меня это работает на Python, но я не могу правильно перевести его на Javascript. В настоящее время мой вывод — это просто значения массива [0] и [1] (не знаю, почему Javascript это делает).

Во всяком случае, мой вопрос: как я могу добиться желаемого результата, используя регулярное выражение в Javascript?

Вы перебираете индексы массива, а не значения массива.

Barmar 09.07.2019 23:20

Моя ошибка, исправил (отредактировано). Основная проблема сохраняется.

find_all 09.07.2019 23:21

Ни одна из ваших строк не содержит bis, почему вы ожидаете, что она что-то заменит?

Barmar 09.07.2019 23:22

должно быть var regex = /\bis\b/ у вас опечатка косой черты.

Kosh 09.07.2019 23:23

/b — это оператор регулярного выражения для проверки наличия пробела, верно?

find_all 09.07.2019 23:23

Нет, escape-последовательности регулярных выражений начинаются с обратной косой черты, а не с косой черты. / — это разделители в начале и в конце регулярного выражения.

Barmar 09.07.2019 23:24

@find_all Нет, \b есть (и это не просто пробелы). Возможно, будет полезен учебник по регулярным выражениям или справочный сайт. регулярные-выражения.info/wordboundaries.html

Dave Newton 09.07.2019 23:24
\b — это граница слова, а вовсе не символ.
Kosh 09.07.2019 23:25

Теперь я вижу, по какой-то странной причине это отлично работало в Python. Я буду больше обучаться на эту тему. Может быть, мне просто повезло.

find_all 09.07.2019 23:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
157
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

это не решение, а рабочий пример:

var myarray = ["this is", "this is iss"];
var my2array = [];
var regex = /is/g;

for (const i in myarray) {
  var x = myarray[i].replace(regex, "")
  my2array.push(x)
}

console.info(my2array)

Получение этого: Ошибка: невозможно прочитать свойство «заменить» неопределенного

find_all 09.07.2019 23:22

@find_all Этот ответ был написан до того, как вы изменили in на of.

Barmar 09.07.2019 23:23

Это не дает желаемого результата, потому что вы не соответствуете границам слов.

Barmar 09.07.2019 23:26

да, просто приведите рабочий пример использования регулярного выражения здесь

fredericrous 09.07.2019 23:27

Спасибо за это, хотя это результат, который я получал раньше, используя замену без регулярного выражения. Бармар прав в том, что я специально ищу автономные строки для замены.

find_all 09.07.2019 23:33

Вы неправильно понимаете синтаксис регулярного выражения (прямая косая черта указывает на начало и конец выражения, обратная косая черта используется с различными символами для обозначения определенных наборов символов). Вы можете заменить свое регулярное выражение следующим, так как я думаю, что вы намеревались заменить экземпляры «is» на границы слов с обеих сторон:

var regex = /\bis\b/
Ответ принят как подходящий

Ответ @benvc близок, но оставляет лишние пробелы после замены и, следовательно, не соответствует желаемому результату.

Вместо этого вы можете использовать чередование двух шаблонов, один из которых касается сценариев с пробелами по обе стороны от is (в этом случае вы можете использовать шаблон положительного просмотра, чтобы избежать совпадения последнего пробела, чтобы оставить пробел между словами после замены), а другой касается сценариев с пробелами только с одной стороны от is или вообще без пробелов:

var myarray = ["this is", "this is iss", "is this", "is"]
var my2array = []
var regex = /\s+is\s*(?=\s)|\s*\bis\b\s*/

for (const i of myarray) {
  var x = i.replace(regex, "")
  my2array.push(x)
}

console.info(my2array)

Другие вопросы по теме

Похожие вопросы

Создание независимых секундомеров для каждого элемента в массиве. Установка времени остановки на основе данных, возвращаемых API
Как уведомить внешний интерфейс о необходимости обновления после установки пользовательского утверждения с помощью облачных функций Firebase onCreate listener
Объединяйте таблицы в SQL с повторяющимися именами столбцов в точечную нотацию без необходимости указывать каждый столбец с псевдонимом
Есть ли исправление для этой неясной ошибки, связанной с датой и временем в iOS на несколько минут?
Почему мой дискорд-бот не выходит в сеть без ошибок или чего-то еще?
Правильный способ избежать ${} в строке шаблона JS
Как изменить порядок столбцов с помощью Knex?
Обертывание серии затворов
Открыть ссылку Javascript в новой вкладке, а не в той же вкладке
Как разместить таблицу над каруселью изображений, которая действует как система координат?