从正则表达式中提取最大的数字

3
我正在尝试从javascript字符串中获取最大的数字(1,000,000)。
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
仅凭正则表达式是不行的。一旦您有了正确的模式来获取所有数字,您将需要创建一些算法来检查哪一个最大。 - Jorge Campos
@JorgeCampos 它怎么抓取字母的?我不确定 index: 在哪里包含了? - Liondancer
我认为\d只匹配数字。 - Liondancer
1
我认为这不是正则表达式的工作。 - Avinash Raj
1
你的 parseReg 函数返回一个对象,其中包含多个属性,例如 index 和 input。只需使用匹配的组,忽略其他属性即可。 - arknave
显示剩余3条评论
1个回答

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;
}

JSFiddle: http://jsfiddle.net/R2pmZ/

此函数将返回字符串中最大的数字,如果未找到任何数字,则返回NaN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接