【问题标题】:JS replacing all occurrences of string using variable [duplicate]JS使用变量替换所有出现的字符串[重复]
【发布时间】:2013-07-23 02:30:07
【问题描述】:

我知道str.replace(/x/g, "y")替换了字符串中的所有 x,但我想这样做

function name(str,replaceWhat,replaceTo){
    str.replace(/replaceWhat/g,replaceTo);
}

如何在第一个参数中使用变量?

【问题讨论】:

    标签: javascript string variables replace


    【解决方案1】:

    几年前从浏览器中删除了以下标志的第三个参数,不再需要这个答案 - 现在替换没有标志的全局作品


    Replace 有另一种形式,它接受 3 个参数并接受一个字符串:

    function name(str,replaceWhat,replaceTo){
        str.replace(replaceWhat,replaceTo,"g");
    }
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

    【讨论】:

    • 这是 Firefox 特有的,在 Chrome 中它只替换第一次出现。
    • 没错...它有“非标准”标志。
    • 记住,你需要将它绑定到一个新变量:stackoverflow.com/questions/12231644/…
    • @Hogan 这目前不起作用,请删除此答案或使用有效的解决方案进行更新。
    【解决方案2】:

    RegExp 构造函数接受一个字符串并从中创建一个正则表达式。

    function name(str,replaceWhat,replaceTo){
        var re = new RegExp(replaceWhat, 'g');
        return str.replace(re,replaceTo);
    }
    

    如果replaceWhat 可能包含正则表达式中的特殊字符,您可以这样做:

    function name(str,replaceWhat,replaceTo){
        replaceWhat = replaceWhat.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
        var re = new RegExp(replaceWhat, 'g');
        return str.replace(re,replaceTo);
    }
    

    Is there a RegExp.escape function in Javascript?

    【讨论】:

    • 如果 replaceWhat 包含正则表达式元字符,这将无法按预期工作,例如*, +, [.
    • @pts 文字正则表达式也是如此。
    • 然后也加入这个逻辑:Is there a RegExp.escape function in Javascript?
    • 如果按照提问者的意图使用,如果元字符出现在 replaceWhat 中,这将给出错误的结果。所以最好选择另一个答案!
    • @thatOneGuy 很好,我在函数中添加了return。我显然专注于正则表达式部分,而不是替换部分。
    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多