Javascript 在特定字符串之前和之后添加文本

Javascript 在特定字符串之前和之后添加文本,javascript,regex,replace,Javascript,Regex,Replace,我试图在字符串中的两个特定单词前后添加文本。例如 "There is a cat and a dog" 假设字符为“猫”和“狗”,添加的字符为“白”和“黑”。文本应改为 "There is a white cat and a black dog" 我已经设法做到这一点,使用替换,但有任何更干净的方式来做它 function colorData(tagsText) { tagsText = tagsText.replace(/cat/g, "white cat"); tagsT

我试图在字符串中的两个特定单词前后添加文本。例如

"There is a cat and a dog"
假设字符为“猫”和“狗”,添加的字符为“白”和“黑”。文本应改为

"There is a white cat and a black dog"
我已经设法做到这一点,使用替换,但有任何更干净的方式来做它

function colorData(tagsText)
{
    tagsText = tagsText.replace(/cat/g, "white cat");
    tagsText = tagsText.replace(/dog/g, "black dog");
    return tagsText;
} 

您可以链接
replace
调用

return tagsText.replace(/cat/g, "white cat").replace(/dog/g, 'black dog');
还可以使用对象保留键值并在回调中使用它

var replacements = {
    cat: 'white cat',
    dog: 'black dog'
};

function colorData(tagsText) {
    return tagsText.replace(/cat|dog/g, (x) => replacements[x]);
}
var替换={
猫:“白猫”,
狗:“黑狗”
};
函数colorData(tagsText){
返回标记text.replace(/cat | dog/g,(x)=>replacements[x]);
}
var str=“有一只猫和一只狗”;

document.body.innerHTML=colorData(str)您可以链接
替换
调用

return tagsText.replace(/cat/g, "white cat").replace(/dog/g, 'black dog');
还可以使用对象保留键值并在回调中使用它

var replacements = {
    cat: 'white cat',
    dog: 'black dog'
};

function colorData(tagsText) {
    return tagsText.replace(/cat|dog/g, (x) => replacements[x]);
}
var替换={
猫:“白猫”,
狗:“黑狗”
};
函数colorData(tagsText){
返回标记text.replace(/cat | dog/g,(x)=>replacements[x]);
}
var str=“有一只猫和一只狗”;

document.body.innerHTML=colorData(str)
您可以在
replace
函数中使用匿名函数

有一只猫和一只狗; 警报(s.replace(/\b(?:猫狗)\b/g,功能(x){ 返回值(x=='cat'?'white':'dark')+x;
}));
您可以在
replace
函数中使用匿名函数

有一只猫和一只狗; 警报(s.replace(/\b(?:猫狗)\b/g,功能(x){ 返回值(x=='cat'?'white':'dark')+x;
}));如果有许多键->值替换,则可以使用映射:

var map = { cat: 'white', dog: 'black' };
tagsText.replace(/\b(cat|dog)\b/g, function(match) {
  return map[match] + " " + match;
});
或动态正则表达式:

var regex = new RegExp('\\b(' + Object.keys(map).join('|') + ')\\b', 'g');
tagsText.replace(regex, function(match) {
  return map[match] + " " + match;
});

如果有许多键->值替换,则可以使用映射:

var map = { cat: 'white', dog: 'black' };
tagsText.replace(/\b(cat|dog)\b/g, function(match) {
  return map[match] + " " + match;
});
或动态正则表达式:

var regex = new RegExp('\\b(' + Object.keys(map).join('|') + ')\\b', 'g');
tagsText.replace(regex, function(match) {
  return map[match] + " " + match;
});

你自己的方法对我来说看起来很清晰易读。你对它有什么担心?你自己的方法对我来说看起来非常干净易读。您关心的是什么?可能是
但我不确定:(可能是
但我不确定:(很好地理解
\b
^1很好地理解
\b
^1请注意,\在
RegExp
构造函数中使用时应该是双转义的。使用
新的RegExp('\\b(“…
此外,不需要捕获group@Tushar那么,我应该使用捕获组还是非捕获组,后者我需要额外的两个字节。如果我想在动态正则表达式中的狗之后添加“黑色”怎么办?@soldiershin您可以删除
“+match
部分,并在
映射={dog:'dog black'}
注意\n在
RegExp
构造函数中使用时,应该进行双转义。使用
new RegExp('\\b('…
此外,不需要捕获group@Tushar我应该是捕获组还是非捕获组,后者我需要额外的两个字节。如果我想添加“黑色”怎么办在动态正则表达式?@soldiershin中的狗之后,您可以删除
“+match
部分,并在
map={dog:'dog black'}