我想在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"
任何帮助太多了! 感谢
答案 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/