JavaScript正则表达式的Match()方法

4
我希望这个函数根据字符串返回一个整数,但它无法正常工作。 该字符串将是H或V后跟1或2个数字。
例如:H1 返回99;H09 返回91;H10 返回90;H50 返回50;V1 返回1;V05 返回5;V11 返回11;V50 返回50。
spot 为要输入的字符串。
get100YardVersionEugene: function(spot)
{
        var team = spot.match(/[A-Z]+/);
        var yard = spot.match(/([0-9]+)/);

        if (team == "H")
        {
            return 100-yard;
        }
        else //V
        {
            return yard;
        }
    },

由于某些原因,当使用“V9”(或“H9”)时会出现错误,但当我使用“V09”时就能正常工作。

有人能告诉我为什么吗?

编辑:错误的意思是...... 我有两个变量start和end

所以我有类似如下的东西: start = get100YardVersionEugene("V9")
然后我使用start和end来在html5画布上绘图

start = get100YardVersionEugene("V9") // 不正确地绘制 start = get100YardVersionEugene("V09") // 正确地绘制


“它崩溃”是什么意思?是错误吗?还是错误的结果?哪一个? - Martin Ender
你有查看 JavaScript 控制台是否报告了任何错误吗? - David Thomas
如果你关心性能,那么不要在像这样简单的情况下使用正则表达式,而是使用字符串例程。 - Ron Wertlen
6个回答

5
尝试使用 [parseInt][1] 将 yard 包装起来。
var yard = parseInt(spot.match(/([0-9]+)/), 10);

这对于“H09”不起作用。请查看我的答案,原因是match返回一个数组。 - Denys Séguret

4
你可以简化正则表达式,只检查HV
关于数字,需要记住match返回一个数组,所以你需要通过索引获取值。此外,你不需要捕获组。
实际上,你应该只使用一个正则表达式。
get100YardVersionEugene: function(spot)
{
     var parts = spot.match(/(H|V)([0-9]+)/);
     if (parts) {
        if (parts[1] == "H")
        {
            return 100-(+parts[2] || 0);
        }
        else //V
        {
            return +parts[2];
        }
    }
},

2
匹配函数的结果是一个数组。请执行以下操作:
 var team = spot.match(/[A-Z]+/)[0];

而且您还需要将结果解析为整数。

另外,在这里似乎并不需要使用正则表达式:

var team = spot.substring(0, 1);
var yard = parseInt(spot.substring(1), 10);
return team=='H' ? (100-yard) : yard;

2
正则表达式对于这个问题来说实在是大材小用了。可以尝试使用String.charAt()或String.substr()函数:
get100YardVersionEugene: function(spot)
{
   var team = spot.charAt(0);
   var yard = parseInt(spot.substr(1,2), 10);

   ...
}

Demo: http://jsfiddle.net/yzq9j/2/


1

修改后的代码:spot.match(/([0-9]+)/) 返回一个数组

function get100YardVersionEugene(spot)
{
        var team = spot.match(/[A-Z]+/);
        var yard = spot.match(/([0-9]+)/);
       console.log(team , yard );
        if (team == "H")
        {
            return 100-yard[0];
        }
        else //V
        {
            return yard[0];
        }
    }

1

你可能需要将你的码转换成数字

if( team == H ){
 return 100-parseInt(yard);
}

那么使用isNaN方法检查转换的有效性可能会很好。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接