e-s*_*tis 1 javascript regex currency
我需要在网页中匹配无数个数字.
我需要能够匹配以下所有格式:
100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$
Run Code Online (Sandbox Code Playgroud)
等效使用逗号:
444,333
22,333
1,222
11,111,111
333,333,333,333.01132
Run Code Online (Sandbox Code Playgroud)
或空格:
444 333
22 333
1 222
11 111 111
333 333 333 333.01132
Run Code Online (Sandbox Code Playgroud)
这对我来说真的很难.我习惯玩regexp,但我完全没有写出一些防弹证明.通常http://www.regexlib.com有解决方案,但不适用于此.
我想不出除了使用regexp之外的其他方法,因为它是纯文本搜索/替换.
这是一个正则表达式,它将匹配您提供的所有数字格式:
^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$
Run Code Online (Sandbox Code Playgroud)
要打破它:
^(?:\$\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个正则表达式,当你可以写几个,并依次应用它们?
我假设(?)你可以逐行迭代.为什么不尝试使用精通逗号的正则表达式,然后是精通空间的正则表达式等等?如果匹配,则不要费心尝试其余的,并存储您的结果并转到下一行.