2013-04-29 22 views
1
var s= "this is inline $\alpha$, $$not$$"; 

我怎么能代替'$'通过'%%'但不是'$$'

使得输出

var s= "this is inline %%\alpha%%, $$not$$"; 

我想

s.split('$').join('%%') 

但我需要只有一个而不是两个美元的分裂。

回答

9

你可以使用一个回调和贪婪量词:

s.replace(/\$+/g, function(match) { 
    return match.length === 1 ? '%' : match; 
}); 
+0

+1为第一种方法,但第二种方法在奇数大于$'的情况下会出现错误输出,或者临时替换出现在字符串中的其他位置。 – Vulcan 2013-04-29 18:36:22

+0

@Vulcan:真的......我想我会删除那个:) – 2013-04-29 18:37:03

3

另一种方式来做到这一点:

.replace(/(^|[^$])\$([^$]|$)/g, "$1%%$2") 

由于$单独是,应该有之前和之后没有$,所以我们可以尝试在之前和之后匹配一个非$字符,并将它们替换回替换字符串中。