javascript - js的正则表达式
本文介绍了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屋!
查看全文