发现很多正则表达式但在我的javascript中尝试它们失败了

时间:2015-07-29 19:37:14

标签: javascript regex

我有购物车的这段代码,但如果有小数值(分)则失败。我尝试替换正则表达式,但然后它返回NaN(非数字)错误:

代码:

<script type="text/javascript">
$(document).ready(function () {
var $selects = $("select").change(function (e) {
    var total = 0;
    $selects.each(function() {

        var val = this.value.match(/^\$(\d+)$/);
        total += val ? +val[1] : 0;
    });
    $("#total").val(total);
});
});
</script>

在匹配行中替换正则表达式:

var val = this.value.match(/^\$(\d+(?:\.\d{1,2}\)?$/);

3 个答案:

答案 0 :(得分:2)

要匹配$123.56$12.5等字符串,您可以使用此固定正则表达式:

^\$(\d+(?:\.\d{1,2})?)$
                   ^ ^

请参阅demo

由于非捕获组?之后的(?:\.\d{1,2})量词,它也会匹配整数值。

注意:它实际上是同一个正则表达式,我在最后)之前删除了反斜杠,并在模式的末尾添加了)以关闭首先,只有正确地捕捉群体。

答案 1 :(得分:1)

试试这个:

var val = this.value.match(/^\$(\d+\.?\d*)$/);

答案 2 :(得分:1)

如果我理解正确,您只想匹配一个带小数值或没有小数值的数字。你可以用这个:

^\$([\d\.]+)$ 

Live Example

如果要将小数限制为两个位置,请将其放在未捕获的组中并使用{}运算符:

^\$(\d+(?:\.\d{1,2})?)$
  1. ^:字符串/行的开头。
  2. \$:按字面意思匹配$
  3. (:启动捕获组。
  4. \d+:匹配一个或多个数字
  5. (?::启动一个无法捕获的群组。
  6. \.:按字面意思匹配.
  7. \d{1,2}:匹配长度为1或2的数字。
  8. ?:懒惰选择器,整个小数场景是可选的(所以你可以匹配整数)。
  9. $:匹配字符串/行的结尾。