【问题标题】:how to replace last occurrence of a word in javascript?如何替换javascript中最后出现的单词?
【发布时间】:2009-05-09 09:59:12
【问题描述】:

例如:

var str="<br>hi<br>hi";

替换最后一个(第二个)&lt;br&gt;

改为"&lt;br&gt;hihi"

我试过了:

str.replace(/<br>(.*?)$/,\1);

但这是错误的。什么是正确的版本?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    你可以利用量词是贪婪的事实:

    str.replace(/(.*)<br>/, "$1");
    

    但缺点是会导致回溯。

    另一种解决方案是将字符串拆分,将最后两个元素放在一起,然后将部分连接起来:

    var parts = str.split("<br>");
    if (parts.length > 1) {
        parts[parts.length - 2] += parts.pop();
    }
    str = parts.join("<br>");
    

    【讨论】:

    • str.replace(/([\s\S]*)&lt;br&gt;/, "$1"); 用于多行。
    【解决方案2】:

    我想你想要这个:

    str.replace(/^(.*)<br>(.*?)$/, '$1$2')
    

    这会贪婪地匹配从开头到&lt;br&gt;,然后是&lt;br&gt;,然后不贪婪地匹配到结尾的所有内容。

    【讨论】:

    • 您不希望它是:str.replace(/^(.*)((
      )*?)$/, '$1$2') 以便包含
      在最后一场比赛中?
    • 整个想法是删除最后一个
    【解决方案3】:
    String.prototype.replaceLast = function(what, replacement) { 
        return this.replace(new RegExp('^(.*)' + what + '(.*?)$'), '$1' + replacement + '$2');
    }
    
    str = str.replaceLast(what, replacement);
    

    【讨论】:

    • 答案仅由代码组成,没有或很少解释,这让未来的访问者很难理解提问者应该采用哪种方法以及为什么您的答案是可行的。请在您的代码中添加说明。
    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多