我正在寻找一个简短的代码,可以将逗号放入一组数字,直到我来到这个网站.
代码:
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
Run Code Online (Sandbox Code Playgroud)
工作真的很棒.有这个例子的数字集:
addCommas('83475934.89');
Run Code Online (Sandbox Code Playgroud)
将返回"83,475,934.89",但当我阅读代码时,我希望它返回,8,3,4,7,5,934.89但这个网站解释了这一点
\d+结合使用\d{3}将匹配一组3个数字,前面跟着任意数量的数字.这使得搜索从右到左替换.
我很困惑.这段代码如何从右到左阅读?另外,是什么$1和$2意味着什么呢?
Bri*_*acy 14
它实际上并不是从右向左阅读.真正发生的是它重复应用(\d+)(\d{3})模式(通过while循环)并替换直到它不再匹配模式.换一种说法:
迭代1:
x1 = 83475934.89
x1.replace((\d+)(\d{3}), '$1' + ',' + '$2');
x1 = 83475,934.89
Run Code Online (Sandbox Code Playgroud)
迭代2:
x1 = 83475,934.89
x1.replace((\d+)(\d{3}), '$1' + ',' + '$2');
x1 = 83,475,934.89
Run Code Online (Sandbox Code Playgroud)
迭代3:
x1 = 83,475,934.89
x1.replace((\d+)(\d{3}), '$1' + ',' + '$2');
// no match; end loop
Run Code Online (Sandbox Code Playgroud)
编辑:
另外,$ 1和$ 2是什么意思?
这些都是回匹配的组引用(\d+)和(\d{3})分别.
这是学习正则表达式实际工作方式的一个很好的参考:http:
//www.regular-expressions.info/quickstart.html
小智 7
它从右到左匹配,因为它使用贪婪的模式匹配.这意味着它首先找到所有数字(\ d +),然后尝试找到\ d {3}.例如,在数字2421567.56中,它将首先匹配数字直到'.' - 2431567 - 然后向后工作以匹配正则表达式的下一部分中的下三个数字(567).它在一个循环中执行此操作,在$ 1和$ 2变量之间添加逗号.
$表示在正则表达式中用括号形成的匹配组,例如(\ d +)= $ 1和(\ d {3})= $ 2.这样,它可以轻松地在它们之间添加字符.
在下一次迭代中,贪婪匹配在新创建的逗号处停止,并继续直到它不能匹配> 3位数.
| 归档时间: |
|
| 查看次数: |
8825 次 |
| 最近记录: |