3

この関数が文字列に基づいて int を返すようにしたいだけですが、機能しません。H または V のいずれかで、その後に 1 桁または 2 桁が続きます。

IE: H1 リターン 99
    H09 リターン 91
    H10 リターン 90
    H50 リターン 50
    V1 リターン 1
    V05 リターン 5
    V11リターン11
    V50 リターン 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を入れると動作します。

誰かが理由を教えてもらえますか?

編集:それは次のように壊れます...私は2つの変数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

正規表現を少し単純化して、HまたはをチェックするだけにすることができますV

数値に関してはmatch、配列を返すことを覚えておく必要があるため、インデックスごとに値を取得する必要があります。また、キャプチャグループは必要ありません。

実際には、1つの正規表現を使用する必要があります。

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

一致関数の結果は配列です。これを行う :

 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 に答える