以前遇到正則表達式,難的都不肯意分析,總以爲以後碰不到,可是做爲個程序員,正則是至關重要的,這裏記一下這個例子。程序員
首先正則的一個用法 :(?=pattern)正則表達式
正向確定預查,在任何匹配pattern的字符串開始處匹配查找字符串。
這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。
例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中的「Windows」。
預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。
代碼以下:spa
function commafy(num) { return num && num .toString() .replace(/(\d)(?=(\d{3})+\.)/g, function ($1, $2, $3) { console.log($1, $2, $3); return $2 + ','; }); } console.log(commafy(12345678.11));
輸出:code
分析:blog
1.$1, $2, $3分別表明正則匹配的括號裏的值字符串
(\d{3})+\. 說明匹配3個及3的倍數個數字加「.」結尾的 如 345678. 或 678.io
(\d)(?=(\d{3})+\. 說明只有匹配到該數字後有3個及3的倍數個數字加「.」結尾的該數字被匹配 如 2345678. 的2被匹配 5678. 的5被匹配console