Я пытаюсь написать функцию для замены любого автономного набора совпадающих символов. Например:
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?
Моя ошибка, исправил (отредактировано). Основная проблема сохраняется.
Ни одна из ваших строк не содержит bis, почему вы ожидаете, что она что-то заменит?
должно быть var regex = /\bis\b/ у вас опечатка косой черты.
/b — это оператор регулярного выражения для проверки наличия пробела, верно?
Нет, escape-последовательности регулярных выражений начинаются с обратной косой черты, а не с косой черты. / — это разделители в начале и в конце регулярного выражения.
@find_all Нет, \b есть (и это не просто пробелы). Возможно, будет полезен учебник по регулярным выражениям или справочный сайт. регулярные-выражения.info/wordboundaries.html
\b — это граница слова, а вовсе не символ.
Теперь я вижу, по какой-то странной причине это отлично работало в Python. Я буду больше обучаться на эту тему. Может быть, мне просто повезло.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


это не решение, а рабочий пример:
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 Этот ответ был написан до того, как вы изменили in на of.
Это не дает желаемого результата, потому что вы не соответствуете границам слов.
да, просто приведите рабочий пример использования регулярного выражения здесь
Спасибо за это, хотя это результат, который я получал раньше, используя замену без регулярного выражения. Бармар прав в том, что я специально ищу автономные строки для замены.
Вы неправильно понимаете синтаксис регулярного выражения (прямая косая черта указывает на начало и конец выражения, обратная косая черта используется с различными символами для обозначения определенных наборов символов). Вы можете заменить свое регулярное выражение следующим, так как я думаю, что вы намеревались заменить экземпляры «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)
Вы перебираете индексы массива, а не значения массива.