首页 新闻 会员 周边

如何解释“$&”是什么意思,在str.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')中。

0
悬赏园豆:20 [已解决问题] 解决于 2014-07-10 19:45

在将金钱数变成带有千分位时候,用到正则表达式替换,如下:

1 //价格千分位格式化
2 function formatNum(num){
3     return (num.toFixed(2) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
4 }

这个replace方法第二个参数'$&,'表示什么意思,我知道$1,$2..表示每个子表达式,但是这个是$&是什么?

求高手指导!

liuzhaoqing的主页 liuzhaoqing | 菜鸟二级 | 园豆:219
提问于:2014-07-08 09:31
< >
分享
最佳答案
1

参考链接:http://www.w3school.com.cn/jsref/jsref_replace.asp

 

$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。
收获园豆:20
幻天芒 | 高人七级 |园豆:37175 | 2014-07-08 10:28

谢谢回答。

w3school上解释有点少,我还是不理解,‘$&’替换与regexp相匹配的子串。 如果字符串str=123456789.00,替换结果应该是“123,456,789.00”,按照我的理解‘$&,’在regexp=/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, 匹配的应该是'123'吧,然后把'123'换成'123,', 那么后续的','是怎么添加上的?

liuzhaoqing | 园豆:219 (菜鸟二级) | 2014-07-09 20:59

@liuqingsha3: '$&,' ,注意看这个字符串,里面可是有逗号的哦!

幻天芒 | 园豆:37175 (高人七级) | 2014-07-10 00:30

@幻天芒: 我注意到‘$&,’中的‘,’了。

我指的是替换后,应该有一个逗号啊,变成这样‘123,456789.00’,之后的456后面的逗号,还没有放上呢。

是不是这个/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g中的(?=patton)正向肯定预查可以查询多次啊,比如第一次查询出123(...),把'123'换成'123,',然后继续查询出456(...),把'456'替换成'456,',再继续查就没有符合的了,所以查询替换停止了,最终替换变成了“123,456,789.00”。

也就是说这个替换中,存在多个替换呢? 可以这样理解吗???

liuzhaoqing | 园豆:219 (菜鸟二级) | 2014-07-10 08:58

@liuqingsha3: 注意看正则,后面有个/g,这个参数就代表多次替换。

幻天芒 | 园豆:37175 (高人七级) | 2014-07-10 12:58

@幻天芒: 恩,好, 谢谢了!!!

liuzhaoqing | 园豆:219 (菜鸟二级) | 2014-07-10 19:44

@幻天芒:  请问最后两位小数怎么让它显示的是四舍五入的,而不是显示的00

xuguoqi | 园豆:202 (菜鸟二级) | 2017-02-22 10:44

@xuguoqi: 默认就是四舍五入。

(5.155).toFixed(2); // => '5.16'。

// 注意,计算机上的四舍五入和数学上的四舍五入有差异,需要判断前一位的奇偶。

如:(5.255).toFixed(2); // => '5.25'
幻天芒 | 园豆:37175 (高人七级) | 2017-02-22 11:47

@幻天芒: 

function format (num) {
return (num.toFixed(2) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
}

帮忙看下这段代码可不可以让小数部分是四舍五入

xuguoqi | 园豆:202 (菜鸟二级) | 2017-02-22 11:50

@xuguoqi: 这种就不应该让正则来做。先取出数字,然后在toFixed即可。

幻天芒 | 园豆:37175 (高人七级) | 2017-02-22 11:52
其他回答(1)
0

 请问最后两位小数怎么让它显示的是四舍五入的,而不是显示的00

 

xuguoqi | 园豆:202 (菜鸟二级) | 2017-02-22 10:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册