替换所有出现的字符串,两边都有空格

时间:2014-02-25 21:58:45

标签: javascript regex string replace indexof

我想在javascript中创建一个函数

function replaceAll(str, find, replaceBy)
如果一个事件被空格包围(/ s / - 而不仅仅是“。”),则

替换字符串中所有出现的指定字。另外,如果一个事件发生在字符串的开头(但是在右侧有空格),或者如果事件是最后一个字(但在其左侧有空格),那也没关系。

我试过做一个while循环,但它非常难看。我相信这对于一些智能正则表达式是可行的,尽管我对正则表达式并不熟练。

示例输入

replaceAll("I went down to the III  Isupermarket. I never<I>  go  anywhere outside my \n  house   I", "I", "he");

示例输出

"he went down to the III  Isupermarket. he never<I>  go  anywhere outside my \n  house   he"

任何帮助太多了! 感谢

1 个答案:

答案 0 :(得分:2)

你可以构造一个允许两边都有空格的正则表达式:

function replaceAll(str, find, replaceBy) {
    var regex = new RegExp("(^|\\s)" + find + "(?=\\s|$)", "g");
    return str.replace(regex, "$1" + replaceBy);
}

工作演示:http://jsfiddle.net/jfriend00/dC5T7/


然后,要在将find字符串和replaceBy字符串中的字符作为正则表达式的一部分使用之前将其转义,您可以执行以下操作:

RegExp.escapePattern = function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

RegExp.escapeReplace = function(s) {
    return s.replace(/\$/g, "$$");
};

function replaceAll(str, find, replaceBy) {
    find = RegExp.escapePattern(find);
    replaceBy = RegExp.escapeReplace(replaceBy);
    var regex = new RegExp("(^|\\s)" + find + "(?=\\s|$)", "g");
    return str.replace(regex, "$1" + replaceBy);
}

两个转义操作的工作演示:http://jsfiddle.net/jfriend00/xV9e8/