Javascript replace()删除两个特殊字符之一

时间:2014-05-30 12:57:09

标签: javascript jquery html replace

替换变量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是否有什么问题,以及如果有任何通用方法来实现结果结果字符串用两个$符号恢复。

2 个答案:

答案 0 :(得分:2)

$$String.replace()中的replacement pattern,始终由单个$取代。你需要加倍所有美元符号:

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

(四美元符号,因为他们再次作为替代模式。)

答案 1 :(得分:1)

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

为了让您的代码具体运作,我认为这将是最简单的事情:

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

JSFiddle

有关$replace()Mozilla docs

的详细信息,请参阅此处

想想我也会在这里插入我的评论:

如果您需要确保在{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