2013-04-29 48 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") 

由於$單獨是,應該有之前和之後沒有$,所以我們可以嘗試在之前和之後匹配一個非$字符,並將它們替換回替換字符串中。