如何匹配 $.49?

《Vue.js实战》 一书 p102 有一个判断参数值是否为数值的正则表达式,援引如下:

function isValueNumber(value) {
            return (/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)|(^-?{1}$)/).test(value + '');
        }

为更准确的理解这段正则的含义,特意找出《精通正则表达式》一书,重温了起来。

《精通。。。》一书 p24举了个例子,如何匹配美元金额,答案是:

\$[0-9]+(\.[0-9][0-9])?

作者提及,此表达式无法匹配 $.49,答案在p194揭晓了,既使用分支选项。

不过我在使用 egrep 尝试此例子时,却遇到了奇异现象,

1)单独使用 

\$[0-9]+(\.[0-9][0-9])?

可匹配 $19.9 和 $22,不能匹配 $.49

2)单独使用

\$\.[0-9]+

可匹配 $.49,不能匹配 $19.9 和 $22

3)合并使用前两者,则无法同时匹配这3个数值,仔细研究后,发现是在使用匹配任意子表达式时,符号 | 的前后有空格,导致的出错,去掉空格,则可成功匹配3个数值。见下图。

 

posted @ 2020-04-11 00:09  sx00xs  阅读(176)  评论(0编辑  收藏  举报