我有以下regex模式,它将youtube视频与我独特的URLyoutube url/URL模式相匹配
\[(url|u2b)](http|https):\/\/(m.|www.)?(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})(.*?)\[\/(url|u2b)]这几乎是万无一失的工作,提取youtube视频ID,但如果我把两个youtube视频在同一条线上,那么比赛将只有一个结果,而不是两个。这个图案正试着作为一个整体来匹配。
例如,如果我在youtube上放了两段视频,如下所示:
[url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url]
[url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url]它工作得很好。
但是,如果我试图将这两个视频合并到一行中,那么我就有了一个问题,这只会导致一个格式错误的匹配:
[url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url] [url]https://www.youtube.com/watch?v=L9-Sr8RPty4[/url]顺便说一下,我在Javascript中用.replace函数完成了所有这些工作。
谢谢!
发布于 2015-03-19 00:49:35
这是因为在.+或.*之间进行匿名匹配。
\[(url|u2b)](http|https):\/\/(m\.|www\.)?(?:youtube\.com\/(?:[^\/]+\/(?:(?!\/?\1).)*\/|(?:v|e(?:mbed)?\/|(?:(?!\/?\1).)*[?&]v=)|youtu\.be\/))([^"&?\/ ]{11})(.*?)\[\/(url|u2b)]我刚把中间的.+或.*?改成了(?:(?!\/?\1).)*。它在匹配每个字符之前检查条件。条件是,它检查要匹配的字符不是第一个捕获组中出现的字符串的起始字符(/ (可选)或u)。
https://stackoverflow.com/questions/29135246
复制相似问题