首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >youtube视频的regex匹配模式能以一种非贪婪的方式完成吗?

youtube视频的regex匹配模式能以一种非贪婪的方式完成吗?
EN

Stack Overflow用户
提问于 2015-03-19 00:35:57
回答 1查看 155关注 0票数 0

我有以下regex模式,它将youtube视频与我独特的URLyoutube url/URL模式相匹配

代码语言:javascript
复制
\[(url|u2b)](http|https):\/\/(m.|www.)?(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})(.*?)\[\/(url|u2b)]

这几乎是万无一失的工作,提取youtube视频ID,但如果我把两个youtube视频在同一条线上,那么比赛将只有一个结果,而不是两个。这个图案正试着作为一个整体来匹配。

例如,如果我在youtube上放了两段视频,如下所示:

代码语言:javascript
复制
[url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url]
[url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url]

它工作得很好。

但是,如果我试图将这两个视频合并到一行中,那么我就有了一个问题,这只会导致一个格式错误的匹配:

代码语言:javascript
复制
[url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url] [url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url]

顺便说一下,我在Javascript中用.replace函数完成了所有这些工作。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-19 00:49:35

这是因为在.+.*之间进行匿名匹配。

代码语言:javascript
复制
\[(url|u2b)](http|https):\/\/(m\.|www\.)?(?:youtube\.com\/(?:[^\/]+\/(?:(?!\/?\1).)*\/|(?:v|e(?:mbed)?\/|(?:(?!\/?\1).)*[?&]v=)|youtu\.be\/))([^"&?\/ ]{11})(.*?)\[\/(url|u2b)]

我刚把中间的.+.*?改成了(?:(?!\/?\1).)*。它在匹配每个字符之前检查条件。条件是,它检查要匹配的字符不是第一个捕获组中出现的字符串的起始字符(/ (可选)或u)。

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29135246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档