如何阻止javascript替换与我正在尝试替换的字符串匹配的单词部分? 以下是它正在做的事情的一个例子:
function replaceApple(){
var aString = "apple app";
var replacing = "app";
return aString.replace(new RegExp(replacing, 'gi'),"cool");
}
结果:
coolle cool
我怎样才能使它不会乱用整个单词?结果是:
apple cool
有没有修复此问题,还是必须构建一个循环遍历每个单词的函数?
答案 0 :(得分:3)
str = 'apple app';
replace = 'app';
str = str.replace(new RegExp('\\b' + replace + '\\b', 'gi'), ' is a fruit ');
结果
apple is a fruit
答案 1 :(得分:1)
我认为你必须使用正则表达式来匹配整个单词
"apple app".replace(/(^|\s)app(\s|$)/g, 'cool');
更新
function replaceApple() {
var aString = "apple app";
var replacing = "app";
var reg = new RegExp('(^|\\s)' + replacing + '(\\s|$)', 'gi');
return aString.replace(reg, "cool");
}
答案 2 :(得分:1)
您可以使用字边界来执行完整的字匹配:
function replaceApple(){
var aString = 'apple app';
return aString.replace(/\bapp\b/,'cool');
}
更新 - 在OP发布了一些额外要求后
建议您不要构建RegEx传递文字字符串,因为文字字符串\
必须被转义;你可以这样做:
function replaceApple(replacing) {
var aString = 'apple app';
replacing = '\\b'+replacing+'\\b';
return (aString.replace(new RegExp(replacing,'gi'),'cool'));
}