Javascript 的复杂货币正则表达式的提示?
-
06-07-2019 - |
题
我需要匹配网页中无限数量的数字。
我需要能够匹配以下所有格式:
100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$
以及使用逗号的等效内容:
444,333
22,333
1,222
11,111,111
333,333,333,333.01132
或空格:
444 333
22 333
1 222
11 111 111
333 333 333 333.01132
这对我来说真的很难。我习惯了使用正则表达式,但我完全没能写出防弹的东西。通常 http://www.regexlib.com 有解决方案,但不适用于此。
除了使用正则表达式之外,我想不出其他方法,因为它是纯文本搜索/替换。
解决方案
这是一个正则表达式,它将匹配您提供的所有数字格式:
^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$
分解它:
^(?:\$\s*)?
将在字符串的开头查找可选的 $,后跟任意数量的空格(?:(?:\d{0,3}(?:[, ]\d{0,3])*[, ])+\d{3}|\d*)
将匹配由逗号或空格分隔的分组数字(\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}
) 或一串数字 (\d+
) -- 因此 123,456,789、123 456 789 和 123456789 将全部匹配。正则表达式不会接受分组不正确的数字(因此 123,45,6789 将不会被匹配)(?:\.\d*)?
将匹配带有可选小数点的数字以及后面任意数量的数字(?:\s*\$)?$
将匹配字符串末尾的可选 $,前面有任意数量的空格。
其他提示
为什么要写1个正则表达式,当你可以写几个,然后轮流应用它们?
我假设(?)你可以逐行迭代。为什么不尝试使用精通逗号的正则表达式,然后是精通空间的正则表达式等等?如果匹配,则不要费心去尝试其余的,然后存储结果并转到下一行。
如何分两步完成:
首先用''
替换所有空格然后,如果数字格式始终相同,则可以用''
替换逗号之后,它很简单,没有?
不隶属于 StackOverflow