使用.match()返回0的undefined

时间:2013-06-30 21:20:26

标签: javascript jquery regex match

 var v = $(forum[yourVersion]+' a[href*="youtube.com/v/"]');
   for ( i = 0; i < v.length; i++) {
     var match = v[i].href.match(/\(((\s*?.*?)*?)\)/);
     v[i].href = v[i].href.replace(match[0],'');
     var c = v[i].href.replace(/(www\.)?youtube.com/, 'img.youtube.com');
     var d = c.replace('v','vi');
     v[i].outerHTML= '<a class="uTubeE" rel="vid_gallery" title="'+match[1]+'" href="' + v[i].href + '"><span class="uTubeE_overlay"></span><img src="'+ d +'/0.jpg"/>';
     v[i].className='uTubeE';
    }

我正在尝试让这两个工作正常,早些时候有人帮助我记住.match()这样做 -

var match = v[i].href.replace(/\(((\s*?.*?)*?)\)/,''); 

当然有用,但我需要得到它,所以我可以使用match [0]和匹配[1]以用于以后的用途,例如title属性。

任何人都可以帮忙吗?

这是使用YouTube视频的默认缩略图

     var c = v[i].href.replace(/(www\.)?youtube.com/, 'img.youtube.com');
     var d = c.replace('v','vi');

我匹配的网址是www.youtube.com/v/dje838329,但网址会出现 www.youtube.com/v/dje838329(titleOfMovie)

我正在尝试获取(titleOfMovie)的数据以供以后使用。

请不要说它错了,请提出一些有用的评论,例如可能出现的问题,因为它确实无法使用它,就像我应该用于以后的目的。

2 个答案:

答案 0 :(得分:2)

我接受了您的表达式\(((\s*?.*?)*?)\),它对您的示例文本www.youtube.com/v/dje838329(titleOfMovie)起作用。我确实做了一些小改动:

正则表达式:\(([^)]*)\)

  • \(匹配开放的paran
  • (启动您的捕获组
    • [^)]*匹配所有非关闭的paran字符
    • )结束捕获组
  • \)匹配关闭的paran

enter image description here

Javascript代码示例:

示例文字

www.youtube.com/v/dje838329(title of the movie)**

<强>代码

<script type="text/javascript">
  var re = /\(([^)]*)\)/;
  var sourcestring = "source string to match with pattern";
  var matches = re.exec(sourcestring);
  for (var i=0; i<matches.length; i++) {
    alert("matches["+i+"] = " + matches[i]);
  }
</script>

捕获论坛

[0] => (title of the movie)
[1] => title of the movie

声明

当然,如果字符串没有(name of the movie)格式的标题,那么这将无法匹配

答案 1 :(得分:1)

  

使用.match()返回0未定义的

这不是你得到的错误。问题是您正在访问match result0属性,当正则表达式不匹配时,该属性可能是null。在尝试获得结果之前,您必须对此进行测试。

  

使用replace工作,但我需要得到它,所以我可以使用match [0]并匹配[1]以供以后使用

你可以尝试一个替换器功能,但这只会变得难看。你的match很好,特别是因为你没有做任何奇特的操作。只需获取其匹配的索引并切片您的网址。

顺便说一句,如果你有jQuery可用,你真的应该使用它。

var v = $(forum[yourVersion]+' a[href*="youtube.com/v/"]').each(function() {
    var url = this.href,
        match = url.match(/\(((\s*?.*?)*?)\)/);
    if (match == null)
        return; // abort!
    var d = url.replace(/(www\.)?youtube.com\/v/, 'img.youtube.com/vi');
    this.href = url.slice(0, match.index);
    this.className = "uTubeE"
    this.rel = "vid_gallery";
    this.title = match[1];
    this.innerHTML = '<span class="uTubeE_overlay"></span><img src="'+ d +'/0.jpg"/>';
});