正则表达式从右向左读取

2024-02-27

我一直在寻找一个可以在一组数字中添加逗号的短代码,直到我发现这个网站 http://www.mredkj.com/javascript/nfbasic.html.

代码:

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;
}  

效果真的很棒。有这个示例数字集:

addCommas('83475934.89');  

将返回"83,475,934.89",但是当我阅读代码时,我希望它返回8,3,4,7,5,934.89但这个网站解释说

\d+结合\d{3}将匹配一组 3 个数字,前面有任意数量的数字。这会欺骗搜索从右到左替换。

我很困惑。 这段代码如何从右向左读取?另外,什么是$1 and $2 mean?


它不是actually从右到左阅读。真正发生的事情是它反复应用(\d+)(\d{3})模式(通过 while 循环)并替换,直到它不再与模式匹配。换句话说:

迭代 1:

x1 = 83475934.89
x1.replace((\d+)(\d{3}), '$1' + ',' + '$2');
x1 = 83475,934.89

迭代 2:

x1 = 83475,934.89
x1.replace((\d+)(\d{3}), '$1' + ',' + '$2');
x1 = 83,475,934.89

迭代 3:

x1 = 83,475,934.89
x1.replace((\d+)(\d{3}), '$1' + ',' + '$2');
// no match; end loop

Edit:

另外,1 美元和 2 美元是什么意思?

这些是对匹配组的反向引用(\d+) and (\d{3})分别。

这是学习正则表达式实际工作原理的一个很好的参考:
http://www.regular-expressions.info/quickstart.html http://www.regular-expressions.info/quickstart.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式从右向左读取 的相关文章

随机推荐