2012-10-01 73 views
3

我只是想要这个函数返回一个基于字符串的int返回值,但它不起作用 它会是H或V后跟1或2个数字。Javascript正则表达式匹配()

 
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 

当场将我的字符串多数民众赞成要在。

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它的工作原理。

有人能告诉我为什么吗?

编辑:它打破了在... 我有两个变量开始和结束

,所以我有一些像 开始= get100YardVersionEugene(“V9”)
和我使用的开始和结束以绘制在HTML5画布

开始= get100YardVersionEugene( “V9”)//不正确绘制 开始= get100YardVersionEugene( “V09”)//在[parseInt][1]得出正确

+0

你说的 “它打破了” 是什么意思?一个错误?错误的结果?哪一个? –

+0

你有没有看过你的JavaScript控制台的任何报告错误? –

+0

如果你关心性能,那么不要使用regexp来做这样简单的事情,而是使用String例程。 –

回答

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]; 
     } 
    } 
}, 
4

尝试换码。

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

这是真正的问题。这里的ParseInt演示http://jsfiddle.net/XQg7S/ –

+0

这不适用于“H09”。查看我的答案,原因是:匹配返回一个数组。 –

2

匹配函数的结果是一个数组。这样做:

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; 
2

regexp对此是完全矫枉过正。尝试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/

1

你可能需要你的院子里转换成数字

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

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

希望这会有所帮助。

1

修改后的代码:spot.match(/([0-9]+)/)是returing数组

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]; 
     } 
    }