我试图从包含数字、逗号和点的字符串中提取数量$50,000.00。我的代码如下:
$50,000.00
var amount = '$50,000.00Fund Transfer to XXXX9090 Ref #0675'.match(/[^0-9,.]/);
字符串
qnakjoqk1#
您可以使用[\d,]+\.\d+,以防数字中需要点,例如:[\d,]+\.\d+的值。如果dot是可选的-您可以使用[\d,]+(\.\d+)?,但在这种情况下,您可能会捕获不需要的值,例如:9090和0675。因此,您的代码必须看起来像这样:
[\d,]+\.\d+
[\d,]+(\.\d+)?
9090
0675
var amount = '50,000.00Fund Transfer to XXXX9090 Ref #0675'.match(/[\d,]+\.\d+/)[0]
字符串如果这个数字必须是最左边的数字-像这样:
var amount = '50,000.00Fund Transfer to XXXX9090 Ref #0675'.match(/^[\d,]+\.\d+/)[0]
型
yfjy0ee72#
^在一个字符类的开始意味着not。而且你还缺少+。您的表达式的含义是not a digit or , or . and only once答案是/^[\d,\.]+/或/^[0-9,\.]+/
^
not
+
not a digit or , or . and only once
/^[\d,\.]+/
/^[0-9,\.]+/
kyks70gy3#
试试这个-\d{1,3}(,\d{3})*\.\d{2}。它应该只匹配那些用十进制分隔符(点.)和千位分隔符(逗号,)正确格式化的数字:
\d{1,3}(,\d{3})*\.\d{2}
.
,
const amount = '50,000.00Fund Transfer to XXXX9090 Ref #0675'.match(/\d{1,3}(,\d{3})*\.\d{2}/)[0]; console.log(amount)
字符串您也可以匹配开头带有美元符号的数字,但您需要在regexp中转义该字符,因为它具有特殊含义(字符串结束):\$\d{1,3}(,\d{3})*\.\d{2}个
\$\d{1,3}(,\d{3})*\.\d{2}
xoefb8l84#
如果字符串以一个、两个或三个数字开头,后面紧跟任意数量的集合,这些集合恰好包括一个逗号和三个数字,则匹配。
^[0-9]{1,3}((\,[0-9]{3})|)+
字符串此外,您可以添加以下项,以选择性地允许精确的两位小数:
^[0-9]{1,3}((\,[0-9]{3})|)+((\.[0-9]{2})|)
型在你的例子中,金额有一个前导美元符号,所以我们必须修改正则表达式如下:
^\$[0-9]{1,3}((\,[0-9]{3})|)+((\.[0-9]{2})|)
4条答案
按热度按时间qnakjoqk1#
您可以使用
[\d,]+\.\d+
,以防数字中需要点,例如:[\d,]+\.\d+
的值。如果dot是可选的-您可以使用
[\d,]+(\.\d+)?
,但在这种情况下,您可能会捕获不需要的值,例如:
9090
和0675
。因此,您的代码必须看起来像这样:
字符串
如果这个数字必须是最左边的数字-像这样:
型
yfjy0ee72#
^
在一个字符类的开始意味着not
。而且你还缺少+
。您的表达式的含义是not a digit or , or . and only once
答案是
/^[\d,\.]+/
或/^[0-9,\.]+/
kyks70gy3#
试试这个-
\d{1,3}(,\d{3})*\.\d{2}
。它应该只匹配那些用十进制分隔符(点.
)和千位分隔符(逗号,
)正确格式化的数字:字符串
您也可以匹配开头带有美元符号的数字,但您需要在regexp中转义该字符,因为它具有特殊含义(字符串结束):
\$\d{1,3}(,\d{3})*\.\d{2}
个xoefb8l84#
如果字符串以一个、两个或三个数字开头,后面紧跟任意数量的集合,这些集合恰好包括一个逗号和三个数字,则匹配。
字符串
此外,您可以添加以下项,以选择性地允许精确的两位小数:
型
在你的例子中,金额有一个前导美元符号,所以我们必须修改正则表达式如下:
型