虽然这个问题可以在SO上找到,但是我遇到了一个小问题。我没有使用这里使用的vimeo正则表达式提取vimeo id:Vimeo Regex
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>";
}
}
它不会安慰任何东西。 任何人都可以帮忙吗?
答案 0 :(得分:2)
这个&#34;神奇的正则表达式&#34;不是那么神奇。例如,它不适用于您正在使用的网址。
这是我刚刚设置的另一个解析器:
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;
工作原理:
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()