精通正则表达式读书笔记----正则表达式零宽度断言(2)
给数字每隔三位加逗号。
表达式/(?<=\d)(?=(?:\d\d\d)+$)/g
释义:(?=\d) 表示当前匹配位置,的左边是数字,意义在于逗号不能出现在表达式的字符串的开始位置,如果没有这个表达式,那么就会出现下面这种情况。

(?=(?:\d\d\d)+$)表示当前匹配位置的右边是3位数字并且结尾,可能看到最后的$有点疑惑,和我一样呵呵。
我现在的理解是(?:\d\d\d)+(先不用关心?:等会解释),表示在出现\d\d\d整数倍的地方匹配位置。如下图
上面的表达式里面有一个(?:)它的含义是:搜索(\d\d\d)但不存储匹配到的字符,这样做的意义在于,正则执行的效率更高,因为不存储匹配到的字符。但有的时候我们是需要存储的,比如在某些替换的时候,存储原来的字符就显得十分的重要。
下面是正确执行的结果。
其实这个表达式有不足,比如不能匹配带有小数的数字……,小数的和这个执行有一点不一样的地方。
下面给出带有小数的表达式:(?<=\d)(?=(\d\d\d)+($|\.))。
这个表达式的可以基本达到我们的要求,但是如果你要匹配的数字字符串,小数点后面的长度超过四位。那么小数点后也会出现逗号。怎么解决请看下节。
posted on 2011-09-05 17:26 BeyondSelf 阅读(338) 评论(1) 收藏 举报



浙公网安备 33010602011771号