使用正则表达式检测Vimeo URL中的9位视频ID
提取Vimeo URL中的9位ID的正则解决方案
你的当前正则/\[\[(https?:\/\/vimeo\.com\/[0-9]+$)\]\]/gm有两个关键限制,导致无法匹配带频道、区域前缀的URL:
- 要求数字必须直接紧跟在
vimeo.com/之后,排除了中间有channels/、jp/这类路径前缀的情况 - 使用
$锚定字符串结尾,意味着数字必须是URL的最后一段(虽然你的示例里数字确实在结尾,但原正则的结构导致前面有其他路径时根本匹配不到)
调整后的正则表达式
/\[\[(?:https?:\/\/vimeo\.com\/).*?(\d{9})\]\]/gm
正则各部分解释
\[\[:匹配包裹URL的开头双中括号(?:https?:\/\/vimeo\.com\/):非捕获组,匹配Vimeo的基础域名(支持http/https),不捕获这部分内容.*?:非贪婪匹配任意字符,直到遇到后面的9位数字(避免匹配过多内容)(\d{9}):捕获组,精准匹配并提取9位数字(这就是我们需要的Vimeo ID)\]\]:匹配包裹URL的结尾双中括号gm:全局匹配+多行匹配标志,确保能处理多个URL字符串
代码示例(JavaScript)
const vimeoUrls = [ "[[https://vimeo.com/channels/mercedesbenz/166551756]]", "[[https://vimeo.com/153002910]]", "[[https://vimeo.com/jp/channels/staffpicks/259634725]]" ]; const idRegex = /\[\[(?:https?:\/\/vimeo\.com\/).*?(\d{9})\]\]/gm; vimeoUrls.forEach(url => { let match; // 循环提取每个URL中的ID while ((match = idRegex.exec(url)) !== null) { console.log(`提取到的Vimeo ID: ${match[1]}`); } });
运行这段代码会输出:
提取到的Vimeo ID: 166551756 提取到的Vimeo ID: 153002910 提取到的Vimeo ID: 259634725
额外说明
如果Vimeo ID可能存在长度不是9位的情况(虽然你明确要9位),可以把\d{9}改成\d+来匹配任意长度的数字ID,再根据需要做长度校验。
内容的提问来源于stack exchange,提问作者Maca
相关产品推荐
相关产品推荐

