从网址

时间:2015-05-29 11:06:21

标签: javascript jquery regex

虽然这个问题可以在SO上找到,但是我遇到了一个小问题。我没有使用这里使用的vimeo正则表达式提取vimeo id:Vimeo Regex

我的代码I,m现在使用:

function vimeoProcess(url){
   var vimeoReg = /https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/;
   var match = url.match(vimeoReg);
   if (match){
      console.log(match[3]);
   }else{
      return "<span class='error'>error</span>";
   }
}

它不会安慰任何东西。 任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

这个&#34;神奇的正则表达式&#34;不是那么神奇。例如,它不适用于您正在使用的网址。

这是我刚刚设置的另一个解析器:

&#13;
&#13;
var urls =
[
  "https://vimeo.com/11111111",
  "http://vimeo.com/11111111",
  "https://www.vimeo.com/11111111",
  "http://www.vimeo.com/11111111",
  "https://vimeo.com/channels/11111111",
  "http://vimeo.com/channels/11111111",
  "https://vimeo.com/channels/mychannel/11111111",
  "http://vimeo.com/channels/yourchannel/11111111",
  "https://vimeo.com/groups/name/videos/11111111",
  "http://vimeo.com/groups/name/videos/11111111",
  "https://vimeo.com/album/2222222/video/11111111",
  "http://vimeo.com/album/2222222/video/11111111",
  "https://vimeo.com/11111111?param=test",
  "http://vimeo.com/11111111?param=test",
  "http://vimeo.com/whatever/somethingelse/11111111?param=test",
  "http://www.player.vimeo.com/stuff/otherstuff/11111111"
];

$.each(urls, function(index, url) {
    
  var firstPart = url.split('?')[0].split("/");
  var vid = firstPart[firstPart.length - 1];
      
  $("table").append('<tr><td>'+url+'</td><td><span>'+vid+'</span></td></tr>');
});
&#13;
td   { font-family: monospace; }
span { background: lightgreen; }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr><th>Input</th><th>Result</th></tr>
</table>
&#13;
&#13;
&#13;

工作原理:

url.split('?')"http://vimeo.com/whatever/somethingelse/11111111?param=test"分成["http://vimeo.com/whatever/somethingelse/11111111","param=test"]

...如果网址中没有["http://vimeo.com/whatever/somethingelse/11111111"],则只需?

现在[0]获取数组的第一个元素,即"http://vimeo.com/whatever/somethingelse/11111111"

然后我们使用.split('/')分割,["http:","","vimeo.com","whatever","somethingelse","11111111"]

现在我们只需要取最后一个元素,即我们的视频ID:

vid = firstPart[firstPart.length - 1] // Gives "11111111"

答案 1 :(得分:1)

使用您当前的代码,只需将正则表达式更改为此代码:

/https?:\/\/player\.vimeo\.com\/video\/(\d+)/gm

并使用第一个(唯一的)匹配元素$1

答案 2 :(得分:0)

如果您只处理vimeo网址,您还可以观察并考虑其网址中唯一的整数为您提供视频ID。

var noquery = url.replace(/\?.*/,'') // remove anything after a ?
var id = noquery.replace(/[^0-9]/g, '') // get all the digits

这会给你一个更简单的代码,直到它破坏

这一切都取决于您是否要从您知道是视频ID的网址中提取ID,或者您想要在一个网址中提取vimeo视频网址

答案 3 :(得分:0)

基于 Jeremy Thille 在列表中的回答。

最后一步,我们是否可以使用 pop() 从该数组中获取最后一个元素,可以是这样的:

let videoId = url.split('?')[0].split('/').pop()