3

我只是希望这个函数根据字符串返回一个 int 但它不起作用它将是 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") //正确绘制

4

6 回答 6

4

试着把院子包起来[parseInt][1]

var yard = parseInt(spot.match(/([0-9]+)/), 10);
于 2012-10-01T15:06:15.920 回答
4

您可以稍微简化一下您的正则表达式,以便它只检查Hor V

关于数字,您需要记住它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];
        }
    }
},
于 2012-10-01T15:06:29.190 回答
2

match 函数的结果是一个数组。做这个 :

 var team = spot.match(/[A-Z]+/)[0];

并且您还需要将结果解析为 int。

或者,这里似乎不需要正则表达式:

var team = spot.substring(0, 1);
var yard = parseInt(spot.substring(1), 10);
return team=='H' ? (100-yard) : yard;
于 2012-10-01T15:06:27.853 回答
2

正则表达式对此完全是矫枉过正。试试 String.charAt() 或 String.substr():

get100YardVersionEugene: function(spot)
{
   var team = spot.charAt(0);
   var yard = parseInt(spot.substr(1,2), 10);

   ...
}

演示:http: //jsfiddle.net/yzq9j/2/

于 2012-10-01T15:10:33.110 回答
1

您可能需要将您的院子转换为数字

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

然后使用 isNaN 方法检查转换有效性可能会很好。

希望这可以帮助。

于 2012-10-01T15:11:05.840 回答
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];
        }
    }
于 2012-10-01T15:11:43.267 回答