我正在尝试创建一个只包含小数点后第3位的脚本。目的是为油价格式化一分之一分。
即。输入3.249将输出
3.24<sup>9</sup>
到目前为止我所拥有的内容包含小数点后的任何内容。例如,我可以跨越第1个,前2个或全部3个,但是不能忽略前2个而只能跨越第3个。
<script>
$(document).ready(function(){
$('.pricesup .maintext > span').html(
$('.pricesup .maintext > span').html().replace(/\.\d{3}/,
function(a){
return '<sup>' + a + '</sup>';
})
);
});
</script>
我需要正则表达式/.\d{3}/来选择最后一位或第三位小数。任何帮助将不胜感激。
答案 0 :(得分:3)
为此,您需要几个捕获组:
<script>
$(document).ready(function(){
$('.pricesup .maintext > span').html(
$('.pricesup .maintext > span').html().replace(/(\.\d\d)(\d+)/g, "$1<sup>$2</sup>");
);
});
</script>
匹配一个点后跟两个数字后跟一个或多个数字。它捕获两个独立捕获组中的第一部分(点后跟两位数)和第二部分(一个或多个后续数字)。在替换中,我们用第一个捕获组替换整体匹配,然后用sup
标记标记包含第二个捕获组。
您也不需要将函数作为第二个arg传递(尽管这样做很好),您可以使用$1
,$2
等占位符。
如果想要使用某个函数,则在完全匹配后,捕获组将作为附加参数传递给该函数:
<script>
$(document).ready(function(){
$('.pricesup .maintext > span').html(
$('.pricesup .maintext > span').html().replace(/(\.\d\d)(\d+)/g, function(m, c1, c2) {
return c1 + "<sup>" + c2 + "</sup>";
});
);
});
</script>
为了完整性:您没有需要来使用捕获组,但它可能是最干净的。如果继续使用函数,则无需执行此操作:
<script>
$(document).ready(function(){
$('.pricesup .maintext > span').html(
$('.pricesup .maintext > span').html().replace(/\.\d{3,}/g, function(m) {
return m.substring(0, 3) + "<sup>" + m.substring(3) + "</sup>";
});
);
});
</script>
rex匹配一个点后跟三个或更多数字,然后将匹配的字符串填满。
我会使用上面的第一个解决方案FWIW,使用捕获组和占位符。