Hey Folks我正试图从看起来像这样的变量中提取金额。
var amountStr = "iPhone ($45.00)";
我已尝试使用以下代码将其解压缩
var amountNum= amountStr.replace( /^\D+/g, '');
输出如何如下
45.00)
有人能让我知道我应该如何以更清洁的方式放弃最后一个')'
谢谢。
答案 0 :(得分:3)
你的正则表达式中有一个“文本开头”标记。这就是它与点或括号不匹配的原因。
var amountNum= amountStr.replace( /\D+/g, '');
将替换字符串中的所有非数字。但是你需要你的点,所以应该使用它:
var amountNum= amountStr.replace( /[^\d\.]+/g, '');
接下来,为了确保您确实有一个数字(不是字符串),以便您可以执行正确的添加,请使用:
var amountNum = parseFloat(amountStr.replace( /[^\d\.]+/g, ''));
但是,如果你有像“iPhone3($ 45.00)”这样的字符串,结果将是345而不是45。你需要在这个字符串中找到你需要的东西,而不是寻找你不需要的东西。一个例子就是:
var amountNum = parseFloat(amountStr.match( /\d+(\.\d+)?/g)[0]);
这也不适用于“iPhone3”,但至少你不会有345,只有3。
所以只需查找最后一个数字,如下:
var amountNum = parseFloat(amountStr.match( /\d+(\.\d+)?/g).pop());
答案 1 :(得分:0)
使用substring方法并指定两个括号之间的金额索引(可以通过括号索引找到)
var amountStr = "iPhone ($45.00)";
var n1 = amountStr.indexOf("(");
var n2 = amountStr.indexOf(")");
var amountNum= amountStr.substring(n1+2, n2)