Регулярное выражение, определяющее границу, но не собирающее ее для замены - javascript - PullRequest
0 голосов
/ 30 мая 2018

У меня есть следующая строка:

"i like ??dogs? and cats"

Я хочу определить подстроку? Dogs?и замените его на что-то другое, скажем, «птицы».

Итак, я создал эту функцию для этого:

function strUnderline (str, oldword, newword) {
                    str = str.replace(new RegExp('(^|[-,.!?:;"\'\(\\s])' + oldword + '(?=$|[-?!,.:;"\'\)\\s])'), "$1" + newword)
            return str;
        };

Но когда я запустил:

strUnderline("i like ??dogs? and cats", "??dogs?", "?birds")

я получаю:

"i like ???birds? and cats"

Я хочу определить границы слов, а также зафиксировать их.

Есть предложения?

1 Ответ

0 голосов
/ 30 мая 2018

Если вы хотите заменить все вхождения oldWord, вам нужно экранировать вопросительные знаки:

function strUnderline(str, oldWord, newWord) {
  oldWord = oldWord.replace(new RegExp(/\?/g), "\\?");
  return str.replace(new RegExp(oldWord, 'g'), newWord);
}

let input = "i like ??dogs? and cats, but especially ??dogs?";
let output = strUnderline(input, "??dogs?", "?birds");
console.log(output);

Для более общего регулярного выражения, которое экранирует все специальные символы, прочитайте this .

...