我来了(以下)答案,以尝试了解连续超前工作的方式。我的理解似乎是矛盾的,并希望有人可以帮助澄清。
这里的答案表明,必须为第一个匹配的字符提供所有指定的前瞻性(为什么连续先行性总是不能正常工作,Sam Whan回答)
如果我将其应用于此答案中的解决方案:如何在JavaScript中以逗号将数字打印为千位分隔符:
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
这意味着它正在寻找一个非边界字符,其后是长度为3的倍数的字符序列,同时又是非数字字符。
例如,12345
知道逗号应该在2后面,但是2
后面跟有3位数字似乎很矛盾,满足第一个前瞻,但第二个前瞻却与之相矛盾,因为它后面不应有任何数字。
我确定我误会了一些东西。任何帮助表示赞赏。谢谢!
此正则表达式:
/\B(?=(\d{3})+(?!\d))/g
仅具有一个正向超前条件,而其他负向超前就位于此第一次超前。
详情如下:
\B
:\b
不匹配的匹配位置(例如,单词字符之间)(?=
:开始提前
(\d{3})+
:匹配一组或多组3位数字(?!\d)
:内部否定的前瞻性断言在3位数字的匹配集之后我们没有数字)
:提前结束但是请注意,最好使用以下代码将数字格式化为一千个分隔符字符串:
console.log( parseFloat('1234567.89').toLocaleString('en') )
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句