在小数点后定位和包装第3位数字

时间:2013-09-08 13:39:24

标签: javascript jquery regex

我正在尝试创建一个只包含小数点后第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}/来选择最后一位或第三位小数。任何帮助将不胜感激。

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

1 个答案:

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