2011-07-27 49 views
0

我在Chrome中運行以下JavaScript。當我期待「123456.78」時,它會產生一個空白字符串。Javascript正則表達式執行不匹配

var amt = "$123,456.78"; 
digitRegex = /(\d|\.)*/ 
amtarr = digitRegex.exec(amt); 
amtstr = amtarr.join(""); 
alert(amtstr); 

任何想法?


最終代碼最終被這:

moneyRegex = /^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{1,2})?$/ 
    amt = $("#txtAmt").val(); 
    amtok = (amt.search(moneyRegex) != -1); 
    amtval = 0; 
    if (amtok == true) { 
     digitRegex = /[\d\.]+/g 
     amtarr = digitRegex.exec(amt); 
     amtstr = amtarr.join(""); 
     alert(amtstr); 
    } 

回答

1

您可以用

digitRegex = /(\d|\.)*/g 

試圖讓所有的比賽。你也可以使用:

digitRegex = /[\d\.]+/g 

這應該是你正在嘗試做的事情。

+0

謝謝@sergio,它做到了。缺少全球旗幟是一個竅門。 – sisdog

3
amtstr = amt.replace(/[$,]/g, ""); 

會給你你想要的。它會從字符串中刪除逗號和美元符號,並保留123456.78

+1

或者,根據上下文的不同,您可能會考慮使用amt.replace(/[^\d.]/g,'')來刪除所有不是數字或'。'的字符。 – HBP

+0

+1謝謝@Tim,希望我能檢查你的答案和塞爾吉奧。 – sisdog

0

我不知道爲什麼*沒有返回結果,將其更改爲+,它會工作。

但是在你的代碼中有另一個錯誤。

digitRegex.exec(amt); 

返回一個數組,但它包含只有第一匹配和下一個和一些其他的東西的位置。 See here mozilla.org

您必須致電exec,直到它返回null以獲得所有匹配並且只有數組中的第一項包含您的匹配項。

var amt = "$123,456.78"; 
digitRegex = /(\d|\.)+/g; 
var result = new Array(); 
while ((amtarr = digitRegex.exec(amt)) != null) 
{ 
result.push(amtarr[0]); 
} 

amtstr = result.join(""); 
alert(amtstr);