【问题标题】:Javascript replace() removing one of the two special charactersJavascript replace() 删除两个特殊字符之一
【发布时间】:2014-06-20 09:43:11
【问题描述】:

替换变量 var2 中的 {t},从 var1 中删除一个“$”符号,并将其呈现为 abc$abc 而不是最终结果中的 abc$$abc。

var var1 = 'abc$$abc';
var var2 = 'You are comparing {t} entity';
$('#div1').append('<div id="div2">' + var2.replace('{t}','<a href="' + var1 + '" target="_self">' + '</a>') + '</div>');

我能找到的最接近的问题是Javascript append element with special characters,但即使这样也无法解决问题。

毫无疑问,我可以检查结果字符串是否只包含两个 $s 中的一个 $,但我想知道上面的 append 是否有任何问题,以及是否有任何通用方法可以使用使用两个 $ 符号恢复结果字符串。

【问题讨论】:

  • 这和$.append()无关,可以简单的用console.log("a".replace("a", "$$"));来演示
  • 你是对的,但我不明白为什么两个 $s 被减少到只有一个。另外,如果包含 $$ 的字符串是动态的,在这种情况下,编写一个单独的函数来执行另一个替换是没有任何意义的。
  • @ronanmarsh,为什么不呢?您也可以及时修复字符串以进行追加替换......append(...var2.replace("{t}", ... var1.split("$").join("$$")..
  • @ronanmarsh,或者如果你在很多地方都这样做并且你不想每次都这样做,你可以创建自己的replaceEscapingDollars(str, find, replacement) { return str.replace(find, replacement.split("$").join("$$"));

标签: javascript jquery html replace


【解决方案1】:

$$String.replace() 中的replacement pattern,它总是被单个$ 替换。您需要将所有美元符号加倍:

var var1 = 'abc$$abc'.replace( /\$/g, '$$$$' );

(四个美元符号,因为它们再次充当替换模式。)

【讨论】:

    【解决方案2】:

    $ 在 javascript 字符串替换中有特殊含义。当您使用$$ 时,您基本上是在逃避其中之一。如果你想要两个,你可以使用四个 $$$$

    为了使您的代码能够具体工作,我认为这是最简单的事情:

    var var1 = 'abc$$abc'.split("$").join("$$");
    

    JSFiddle

    有关$ 的详细信息,请参见此处replace()Mozilla docs


    我想我也会在这里插入我的 cmets:

    如果您需要确保在 {t} 替换期间完成此操作(如果字符串在初始化后可能会更改),您可以像这样将其放入:

    $('#div1').append('<div id="div2">' + 
        var2.replace('{t}','<a href="' + 
            var1.split("$").join("$$") + 
            '" target="_self">' + '</a>')
    + '</div>');
    

    或者如果这是需要在不同地方经常做的事情……你可以为它创建自己的函数……比如:

    function replaceEscapingDollars(str, find, replacement) { 
        return str.replace(find, replacement.split("$").join("$$"));
    }
    

    那么您的代码将如下所示:

    $('#div1').append('<div id="div2">' + 
        replaceEscapingDollars(var2, '{t}', '<a href="' + var1 + '" target="_self">' + '</a>') +
    '</div>');
    

    JSFiddle


    但最简单的可能就是根本不使用replace...

    var2.split('{t}').join(var1)
    

    JSFiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多