Javascript正则表达式匹配()

Javascript正则表达式匹配(),javascript,regex,match,Javascript,Regex,Match,我只希望这个函数返回一个基于字符串的int,但它不起作用 它将是H或V后跟1或2位数字 IE: H1 return 99 H09 return 91 H10 return 90 H50 return 50 V1 return 1 V05 return 5 V11 return 11 V50 return 50 由于某种原因,当

我只希望这个函数返回一个基于字符串的int,但它不起作用 它将是H或V后跟1或2位数字

IE: H1 return 99 H09 return 91 H10 return 90 H50 return 50 V1 return 1 V05 return 5 V11 return 11 V50 return 50 由于某种原因,当它的V9(或H9)时,它会断开,但当我放入V09时,它会工作

有人能告诉我为什么吗

编辑:它会像在。。。 我有两个变量开始和结束

所以我有点像 start=get100YardVersionEugene(“V9”)
我使用开始和结束在html5画布上绘制它

start=get100YardVersionEugene(“V9”)//绘制不正确
start=get100YardVersionEugene(“V09”)//正确绘制

尝试在
[parseInt][1]
中包装码

var yard = parseInt(spot.match(/([0-9]+)/), 10);

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;

您可以稍微简化正则表达式,使其只检查
H
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];
        }
    }
},

对于这一点,regexp是完全多余的。请尝试String.charAt()或String.substr():


演示:

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

if( team == H ){
 return 100-parseInt(yard);
}
然后使用isNaN方法检查转换的有效性可能会更好


希望这有帮助。

修改的代码:
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];
        }
    }

你说的“它坏了”是什么意思?错误?错误的结果?哪一个?您是否查看了JavaScript控制台中报告的任何错误?如果您关心性能,那么不要使用regexp来实现类似的简单操作,而是使用字符串例程。这对“H09”不起作用。查看我的答案以了解原因:match返回一个数组。
if( team == H ){
 return 100-parseInt(yard);
}
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];
        }
    }