定位并包装小数点后的第 3 位数字

Targeting and wrapping the 3rd digit after a decimal

本文关键字:数字 包装 小数点 定位      更新时间:2023-09-26

我正在尝试制作一个脚本,该脚本将仅包装小数点后的第 3 位数字。目的是为油价格式化几分之一美分。

即输入的 3.249 将输出

    3.24<sup>9</sup>

到目前为止,我所拥有的都包装了小数点之后的任何内容。例如,我可以跨越第一个、前 2 个或所有 3 个,但不能忽略前 2 个而只跨第三个。

<script>
$(document).ready(function(){
    $('.pricesup .maintext > span').html(
        $('.pricesup .maintext > span').html().replace(/'.'d{3}/,
            function(a){
                return '<sup>' + a + '</sup>';
        })
    );
});
</script>

我需要正则表达式/.''d{3}/来选择最后一个数字或小数点后第 3 位。任何帮助将不胜感激。

JS小提琴:http://jsfiddle.net/alanfleming/wDntk/

为此

,您需要几个捕获组:

<script>
$(document).ready(function(){
    $('.pricesup .maintext > span').html(
        $('.pricesup .maintext > span').html().replace(/('.'d'd)('d+)/g, "$1<sup>$2</sup>");
    );
});
</script>

这匹配一个点,后跟两位数字,后跟一个或多个数字。它在两个单独的捕获组中捕获第一部分(点后跟两位数字)和第二部分(一个或多个后续数字)。在替换中,我们将整体匹配替换为第一个捕获组不变,然后是包裹在 sup 标记标记中的第二个捕获组。

你也不需要传递函数作为第二个参数(尽管这样做很好),你可以使用 $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,使用捕获组和占位符。