【问题标题】:Using Regex to parse a URI使用正则表达式解析 URI
【发布时间】:2015-07-08 02:26:27
【问题描述】:

我目前正在使用 Modenizr 来根据用户选择的设备确定为用户提供服务的链接。因此,如果他们使用的是移动设备,我想返回一个 URI,如果不是,则只返回一个传统的 URL。

URI: spotify:album:1jcYwZsN7JEve9xsq9BuUX

网址:https://open.spotify.com/album/1jcYwZsN7JEve9xsq9BuUX

现在我正在使用 slice() 来检索 URI 的最后 22 个字符。虽然它有效,但如果 URI 超过上述字符量,我想通过正则表达式解析字符串。在 URI 的第二个冒号之后获取字符串的最佳方法是什么?

$(".spotify").attr("href", function(index, value) {
  if (Modernizr.touch) {
    return value
  } else {
    return "https://open.spotify.com/album/" + value.slice(-22);
  }
});

【问题讨论】:

    标签: javascript jquery regex url uri


    【解决方案1】:

    我想要这样的使用拆分的东西。

    var url = 'spotify:album:1jcYwZsN7JEve9xsq9BuUX'.split(':');    
    var part = url[url.length-1];
    // alert(part);
    
    return "https://open.spotify.com/album/" + part;
    

    【讨论】:

      【解决方案2】:

      正则表达式非常适合这项任务,因为它非常简单,这里的正则表达式支持尽可能多的:,并且仍然可以工作

      /[\w\:]*\:(\w+)/
      

      工作原理

      [\w\:]* 将获取所有单词字符(字母、数字、下划线)和冒号

      \: 基本上会告诉前面的事情在冒号处停止。正则表达式默认是贪婪的,这意味着它会得到最后一个冒号

      (\w+) 将选择所有单词字符并将其存储在一个组中以便我们可以访问它


      这样使用:

      var string = 'spotify:album:1jcYwZsN7JEve9xsq9BuUX',
          parseduri = string.match(/[\w\:]*\:(\w+)/)[1];
      

      parseduri 是结果


      然后你终于可以结合这个了:

      var url = 'https://open.spotify.com/album/'+parseduri;
      

      【讨论】:

      • 最后的[1]代表什么?
      • @CarlEdwards RegEx 返回一个数组["spotify:album:1jcYwZsN7JEve9xsq9BuUX", "1jcYwZsN7JEve9xsq9BuUX"],因此[1] 用于在数组中选择正确的项目。数组从 0 开始
      • 此示例是否需要 string 单独作为一个字符串而不是 URI 数组?有趣的是,我关闭了[1],它似乎工作了。
      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2012-08-23
      • 2014-06-08
      相关资源
      最近更新 更多