1

我正在尝试制作一个仅包含小数点后第三位的脚本。目的是为石油价格格式化一分钱。

IE。3.249 输入会输出

    3.24<sup>9</sup>

到目前为止,我所拥有的包含小数点后的任何内容。例如,我可以跨越第一个、前 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}/ 来选择最后一位或小数点后第三位。任何帮助将不胜感激。

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

4

1 回答 1

3

为此,您需要几个捕获组:

<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,使用捕获组和占位符。

于 2013-09-08T13:41:27.650 回答