2013-10-08 40 views
2

我有一些文本包含美元金額和其他文本。一些美元金額有其他美元金額。下面是一些例子:

  • 1000高達15000

  • $ 40

我希望在每個號碼的開頭加上$如果沒有按已經不存在了。我嘗試:

function convertToMoney(text) { 
    if (!text.match(/\$/)) { 
    return text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); }); 
    } 
    return text; 
} 

如果JS們lookbehind我會用

function convertToMoney(text) { 
    return text.replace(/(?<!\$)\b(?:\d)/g, '$'); 
} 

我可以簡化我的長期解決方案?

我可以使用1000 up to $4000嗎?

UPDATE

應用@ jfriend00解決方案後,我的錢過濾器看起來像這樣:

function moneyFilter(text) 
    var ret = text; 
    if (ret) { 
    ret = ret 
     .replace(/\.\d\d/g, '')     // remove pennies 
     .replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') // add comma 
     .replace(/(\$?)(\d[\d,]+)/g, "$$$2"); // add dollar sign 
    } 
    return ret; 
}) 

回答

2

如何只此:

function convertToMoney(text) { 
    return text.replace(/(\$?)([\d,]+)/g, "$$$2"); 
} 

工作演示:http://jsfiddle.net/jfriend00/y4k3k/

此發現的數字的任何序列(任選地由$符號開頭)和美元符號和數字的序列來替換它。

如果你真的想在你的正則表達式中使用\b,你也可以在這裏添加它,但是我沒有看到它是必需的。

+0

Thx。我也想知道如何擺脫替代的美元符號。 – zhon

2

如何首先從文本中刪除所有$,然後將一個在每個數字的前面?那麼你不必擔心檢查它是否已經存在。

+0

奇怪的是,這正是@ jfriend00是在單次這樣做。 – zhon

0

你可以糾正雙美元符號。

function convertToMoney(text) { 
    if (!text.match(/\$/)) { 
    newString = text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); }); 
    return newString.replace(/\${2}/g, '$'); 
    } 
    return text; 
} 
相關問題