- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经用我的正则表达式尝试了一切,但我似乎无法适应我的新网址,它对我不起作用。
请看我的演示:http://jsfiddle.net/693y7/
基本上,我需要从每个网址中提取视频 ID,并确定它是 YouTube 还是视频,它可以很好地确定其位置,但该 ID 并不适用于所有网址。
我没有编写这个正则表达式,但是我尝试添加用户、附加或运算符来尝试找到替代结果,但我只是没有得到任何结果,有人介意帮助我更好地理解如何处理新的结果吗?演示中的网址不起作用?
网址:
var urls = [
"//player.vimeo.com/video/84687115",
"http://player.vimeo.com/video/25451551",
"http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index",
"http://www.youtube.com/user/usernamehere#p/a/u/1/QdK8U-VIH_o",
"http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0",
"http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s",
"http://www.youtube.com/embed/0zM3nApSvMg?rel=0",
"http://www.youtube.com/watch?v=0zM3nApSvMg",
"https://youtube.googleapis.com/v/My2FRPA3Gf8",
"http://youtu.be/0zM3nApSvMg",
"http://vimeo.com/84687115",
"http://vimeo.com/channels//84687115",
"http://vimeo.com/groups//videos/84687115"
];
这是我用来匹配 ID 的函数
function parseVideo(url) {
url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/|user\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
if (RegExp.$3.indexOf('youtu') > -1) {
var type = 'youtube';
} else if (RegExp.$3.indexOf('vimeo') > -1) {
var type = 'vimeo';
}
return {
type: type,
id: RegExp.$6
};
}
我希望这是足够的信息!
最佳答案
您需要扩展 url 中间的匹配器以允许“channels//”和“groups//”作为有效值 jsfiddle.net/693y7/1
/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/|user\/|channels\/\/|groups\/\/videos\/)?([A-Za-z0-9._%-]*)(\&\S+)?/
正如您所指出的,这对于示例中的第四个 URL 仍然不起作用。要也支持此网址,您需要添加一个与“a/u/1”或正则表达式匹配的附加匹配组
(\/a\/u\/\d)?
正如我在评论中指出的那样,使用非正则表达式方法可能会更简单,假设视频 ID 始终位于 url 的末尾,仅后跟一些元参数,可以使用以下方法 http://jsfiddle.net/693y7/2/
var sres = url.split("/");
var dirtyid = sres[sres.length-1];
return dirtyid.replace("watch?v=", "").split(/&|#|\?/)[0];
这种方法只是用斜杠分割 url,然后获取包含 videoid 和元参数的最后一部分,并使用一些简单的替换和分割操作来获取所需的视频 id。
虽然这种方法可能不是最干净的,但它很容易针对新用例、url 类型进行扩展和调整,并且可能比如此大的正则表达式更强大。
要获取服务类型,只需对“youtu”和/或“vimeo”进行索引检查即可。
关于javascript - 修改正则表达式以允许其他 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149431/
我正在用 yacc/bison 编写一个简单的计算器。 表达式的语法看起来有点像这样: expr : NUM | expr '+' expr { $$ = $1 + $3; } | expr '-'
我开始学习 lambda 表达式,并在以下情况下遇到了以下语句: interface MyNumber { double getValue(); } MyNumber number; nu
这两个 Linq 查询有什么区别: var result = ResultLists().Where( c=> c.code == "abc").FirstOrDefault(); // vs. va
如果我们查看 draft C++ standard 5.1.2 Lambda 表达式 段 2 说(强调我的 future ): The evaluation of a lambda-expressio
我使用的是 Mule 4.2.2 运行时、studio 7.5.1 和 Oracle JDK 1.8.0_251。 我在 java 代码中使用 Lambda 表达式,该表达式由 java Invoke
我是 XPath 的新手。我有网页的html源 http://london.craigslist.co.uk/com/1233708939.html 现在我想从上面的页面中提取以下数据 完整日期 电子
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我将如何编写一个 Cron 表达式以在每天上午 8 点和下午 3:30 触发?我了解如何创建每天触发一次的表达式,而不是在多个设定时间触发。提前致谢 最佳答案 你应该只使用两行。 0 8 * * *
这个问题已经有答案了: What do 3 dots next to a parameter type mean in Java? (9 个回答) varargs and the '...' argu
我是 python 新手,在阅读 BeautifulSoup 教程时,我不明白这个表达式“[x for x in titles if x.findChildren()][:-1]”我不明白?你能解释一
(?:) 这是一个有效的 ruby 正则表达式,谁能告诉我它是什么意思? 谢谢 最佳答案 正如其他人所说,它被用作正则表达式的非捕获语法,但是,它也是正则表达式之外的有效 ruby 语法。 在
这个问题在这里已经有了答案: Why does ++[[]][+[]]+[+[]] return the string "10"? (10 个答案) 关闭 8 年前。 谁能帮我处理这个 JavaSc
这个问题在这里已经有了答案: What is the "-->" operator in C++? (29 个答案) Java: Prefix/postfix of increment/decrem
这个问题在这里已经有了答案: List comprehension vs. lambda + filter (16 个答案) 关闭 10 个月前。 我不确定我是否需要 lambda 或其他东西。但是,
C 中的 assert() 函数工作原理对我来说就像一片黑暗的森林。根据这里的答案https://stackoverflow.com/a/1571360 ,您可以使用以下构造将自定义消息输出到您的断言
在this页,John Barnes 写道: If the conditional expression is the argument of a type conversion then effec
我必须创建一个调度程序,它必须每周从第一天上午 9 点到第二天晚上 11 点 59 分运行 2 天(星期四和星期五)。为此,我需要提供一个 cron 表达式。 0-0 0-0 9-23 ? * THU
我正在尝试编写一个 Linq 表达式来检查派生类中的属性,但该列表由来自基类的成员组成。下面的示例代码。以“var list”开头的 Process 方法的第二行无法编译,但我不确定应该使用什么语法来
此 sed 表达式将输入字符串转换为两行输出字符串。两条输出行中的每一行都由输入的子串组成。第一行需要转换成大写: s:random_stuff\(choice1\|choice2\){\([^}]*
我正在使用 Quartz.Net 在我的应用程序中安排我的工作。我只是想知道是否可以为以下场景构建 CRON 表达式: Every second between 2:15AM and 5:20AM 最
我是一名优秀的程序员,十分优秀!