正则表达式定义边界但不捕获它来替换 - 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。
我有以下字符串:
"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。