【问题标题】:Javascript Regex Match()Javascript 正则表达式匹配()
【发布时间】:2012-09-22 10:53:07
【问题描述】:

我只是想让这个函数根据一个字符串返回一个 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

所以我有类似的东西 开始 = get100YardVersionEugene("V9")
我使用 start 和 end 在 html5 画布上绘制它

start = get100YardVersionEugene("V9") //没有正确绘制 start = get100YardVersionEugene("V09") // 正确绘制

【问题讨论】:

  • 你所说的“它坏了”是什么意思?一个错误?结果错误?哪一个?
  • 您是否查看过您的 JavaScript 控制台是否有任何报告的错误?
  • 如果你关心性能,那么不要对这样简单的事情使用正则表达式,而是使用字符串例程。

标签: javascript regex match


【解决方案1】:

尝试在[parseInt][1] 中包装院子。

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

【讨论】:

  • 这不适用于“H09”。原因见我的回答:匹配返回一个数组。
【解决方案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;

【讨论】:

    【解决方案3】:

    您可以稍微简化一下您的正则表达式,使其只检查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】:

      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/

      【讨论】:

        【解决方案5】:

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

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

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

        希望这会有所帮助。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2011-11-29
            • 1970-01-01
            • 1970-01-01
            • 2011-02-19
            • 2017-03-04
            • 2015-11-13
            相关资源
            最近更新 更多