2014-07-20 28 views
3

我想可以在javascript從該字符串的最大數目(1,000,000)拼搶String形式的正則表達式的最大數量

var teststr = "jUDGES/COACHES: \ 

jAcKsoN PALMeR 1 ATIF NAZlR l jAMES BLAHA l DAVEWl1gGENT \ 
PITCH PROTOTYPE PRESENT \ 
YOUR PRODUCT \ 
ul;"" \ 
1 \ 
bra GWDEAWAYS \ 
GRAND PéizE \ 
1,000,000 DOG COIN \ 
€ Prize PUbNUlS Prize \ 
750,000 DOGECOIN 750,000 DOGECOIN \ 
AFTER PARTY WITH SPECIAL GUEST Dj \ 
jACKSON PALnkjnjnkjMER \ 
JULY 26TH 3PM -]ULY 27TH 11PM"; 


function parseReg(string) { 
    //var re = "(\d+)((.?)(\d+))+([\.\d\d]?)"; 
    return /(\d+)((.?)(\d+))+([\.\d\d]?)/g.exec(string); 
} 

console.log(parseReg(teststr)); 

但現在輸出我從開發者工具得到的是:

["1,000,000", "1", ",000", ",", "000", "", index: 187, input: "jUDGES/COACHES:  jAcKsoN PALMeR 1 ATIF NAZlR l … PALnkjnjnkjMER  JULY 26TH 3PM -]ULY 27TH 11PM"] 

我很新的JavaScript,所以我不太清楚如何做到這一點。我相信我的正則表達式正確的,但我不知道爲什麼字母被抓住

+7

你不能只用正則表達式。一旦你有一個適當的模式來抓住所有的數字,你將不得不創建一些算法來檢查哪一個是最大的。 –

+0

「最大」最高還是最長? – faintsignal

+0

@faintsignal最高 – Liondancer

回答

1

這裏有一個解決方案:

function parseReg(str) { 
    var re = /(?:[\d,]*)\d+(?:\.\d+)?/g; 
    var m; 
    var greatestNumber = NaN; 
    while(m = re.exec(str)) { 
     var parsedNumber = parseFloat(m[0].replace(/,/g, "")); 
     if (!isNaN(parsedNumber)) 
      greatestNumber = isNaN(greatestNumber) ? parsedNumber : Math.max(greatestNumber, parsedNumber); 
    } 
    return greatestNumber; 
} 

小提琴:http://jsfiddle.net/R2pmZ/

該功能可以將返回的最大數量你的字符串,或NaN,如果沒有找到號碼。