replace方式
var num = 12345678;
num.toFixed(2).replace(/\B(?=(?:\d{3})*\b)/g, ",").replace(/^/, "$$ ");
提取方式
var num = "12345678.000";
num.match(/.{1,3}(?=(?:.{3})*[\.$])/g).join(",").replace(/^/,"\$ ") + num.replace(/\d+/,"");
充分应用位置标记,可以看出两个表达式大同小异,为的就是从右向左特性,定位到一个锚点,然后替换锚点位置或者提取锚点位置左侧的字符串。
几个重点:
- 使用带有字符串结尾锚点的正向前瞻来实现从右向左锚点定位。
(?=(.{3})*$)来定位末尾位置往左任意三个字符的位置,(?=)匹配的是位置。 - ()是会提取子串的,我们这里只希望定位位置并不是提取。因此的改为(?:)得到(?:.{3})*$)
- 要匹配并提取字符串中所有位置,要使用g修饰符,执行全局匹配。
网友评论