正则表达式定义边界但不捕获它来替换 - javascript

Regex defining boundary but not capturing it to replace - javascript

我有以下字符串:

"i like ??dogs? and cats"

我要识别子串??dogs?并将其替换为其他内容,比方说“?birds”。

所以我创建了这个函数来做到这一点:

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

但是当我 运行:

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

我得到:

"i like ???birds? and cats"

我想定义单词边界并捕获它们。

有什么建议吗?

如果要替换所有出现的 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