在javascript中,replace()方法正在替换具有实际替换部分的单词

时间:2011-11-01 03:34:58

标签: javascript string replace

如何阻止javascript替换与我正在尝试替换的字符串匹配的单词部分? 以下是它正在做的事情的一个例子:

function replaceApple(){
var aString = "apple app";
var replacing = "app";
return aString.replace(new RegExp(replacing, 'gi'),"cool");
}

结果:

coolle cool

我怎样才能使它不会乱用整个单词?结果是:

apple cool

有没有修复此问题,还是必须构建一个循环遍历每个单词的函数?

3 个答案:

答案 0 :(得分:3)

str = 'apple app';
replace = 'app';
str = str.replace(new RegExp('\\b' + replace + '\\b', 'gi'), ' is a fruit ');

结果

apple is a fruit

Play with it on jsFiddle

答案 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'));
}