regex 使用正则表达式匹配提取数字、点和逗号

1bqhqjot  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(195)

我试图从包含数字、逗号和点的字符串中提取数量$50,000.00。我的代码如下:

var amount = '$50,000.00Fund Transfer to XXXX9090 Ref #0675'.match(/[^0-9,.]/);

字符串

qnakjoqk

qnakjoqk1#

您可以使用[\d,]+\.\d+,以防数字中需要点,例如:[\d,]+\.\d+的值。
如果dot是可选的-您可以使用[\d,]+(\.\d+)?
但在这种情况下,您可能会捕获不需要的值,例如:90900675
因此,您的代码必须看起来像这样:

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]

yfjy0ee7

yfjy0ee72#

^在一个字符类的开始意味着not。而且你还缺少+。您的表达式的含义是not a digit or , or . and only once
答案是/^[\d,\.]+//^[0-9,\.]+/

kyks70gy

kyks70gy3#

试试这个-\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}

xoefb8l8

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

相关问题