javascript - js的正则表达式

查看:76
本文介绍了javascript - js的正则表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

前几天看到了一个面试题
var str="我有$2,200,200.20这么多钱";
请用js计算出我到底有多少钱?
输出要求:输出的为Number类型的数字,而且要考虑通用的情况。
我个人的想法是这样的,就是正则把汉字过滤掉之后然后把新的数组中的数字转化成Number类型,但是google了也学了一晚上的正则,可是还是写不对。

var text="我有$2,200,200.200这么多钱";
var matches=text.exec(/^(([1-9]d*)|0)(.d{1,2})?$/);
console.log(matches[0]);
前面的只是尝试的把汉字过滤掉,可是这里就出了问题。

现在一脸懵逼,求大佬指点。

解决方案

我补充一下把,面试官可能考的不会这么简单,他可能想考察你是否能正确匹配千位分隔符表示法的数字。楼上的答案如果字符串其他地方还出现数字就会出错。比如:

    var str="我有$2,200,200.20这么多钱1234"; str.replace(/[^\d|.]/g,'')
    //"2200200.201234"

观察这种数字表示法,逗号后面一定有三个数字,小数点后面一定有数字,于是,对应的正则应该是这样的:

    /\$\d+(\,\d{3})*(\.\d+)?/

然后我建议的答案是(可能啰嗦点):

function calcMyMoney(str) {
    var moneyRegx = /\$\d+(\,\d{3})*(\.\d+)?/;
    var matchRes = str.match(moneyRegx);
    var money = 0;

    if (matchRes) {
        money = Number(matchRes[0].replace(/[^\d|.]/g, ''));
    }
    return money;
}

var str="我有$2,200,200.20这么多钱";
calcMyMoney(str); // 2200200.2

var str2 = "我有$2,200,200.20这么多钱1234";
calcMyMoney(str2); // 2200200.2

这篇关于javascript - js的正则表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆