2012-10-01 79 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]; 
     } 
    }