【问题标题】:Replace all occurrences of string, that has whitespace on both sides替换所有出现的字符串,两边都有空格
【发布时间】:2014-02-25 21:58:45
【问题描述】:

我想用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"

非常感谢任何帮助! 谢谢

【问题讨论】:

标签: javascript regex string replace indexof


【解决方案1】:

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

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/

【讨论】:

  • 我相信它会返回'heI went down to the III Isupermarket。在我提供的示例中,我从来没有去我\n家之外的任何地方
  • @hrsorensen - 看看这个 jsFiddle:jsfiddle.net/jfriend00/dC5T7。它似乎可以准确地为您提供所需的输出。
  • @hrsorensen - 正如我在上面回答您的评论一样,如果 find 可能包含正则表达式字符,您需要转义它。即使replaceBy 也会有$ 特殊替换字符的问题。
  • @hrsorensen - 因为一旦第一个空格被第一个替换操作使用,它就不会被考虑用于未来的匹配,所以中间匹配不会有前导空格并且不会匹配。这是应该使用\b 功能的用途,但是您对实际空格的要求,而不仅仅是正则表达式认为的单词边界,所以我们不能使用\b 作为尝试@ 的其他答案987654334@ 发现。可能有一种方法可以在正则表达式中使用非捕获空格,但我最终得到的更简单。
  • @hrsorensen - 这是一个更好的版本,它使用前瞻匹配 jsfiddle.net/jfriend00/BjCkK
猜你喜欢
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2012-01-31
  • 2019-01-10
  • 2018-07-11
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多