正则表达式,用于匹配带有视频ID的URL

时间:2019-05-10 19:26:13

标签: ios regex regex-lookarounds regex-group regex-greedy

我正在尝试制作一个iOS快捷方式,该快捷方式将使我立即在新标签页中打开所有网站的视频链接,因此我需要一个RegEx。

以下是此网站上的视频链接的样子:

https://m.worldstarhiphop.com/apple/video.php?v=wshhn5icmk9cKSyh9A17    
https://m.worldstarhiphop.com/apple/video.php?v=wshhc8Ew271C2BZE0l31

到目前为止,我已经拥有了:

^(?!image$).*(worldstarhiphop.com/apple/video)

因为我不希望快捷方式打开所有图像链接,而仅打开视频链接。

1 个答案:

答案 0 :(得分:1)

我已向this expression添加了多个捕获组,以便于修改/更改和理解:

^((https?:\/\/.*)(worldstarhiphop.com)((\/apple\/video.php\?v=)|\/videos\/video.php\?v=)([A-Za-z0-9]{20}))

我没有使用$闭合右侧,如果需要的话,您可以这样做。

您希望匹配的URL有两个移动版本和两个Web版本,为防万一,我添加了两种协议。如果不需要,可以将其删除。

enter image description here

RegEx描述图

该图将其可视化,您可能需要测试此link中的其他表达式:

enter image description here

基本性能测试

此JavaScript代码段返回100万次for循环以提高性能。

const repeat = 1000000;
const start = Date.now();

for (var i = repeat; i >= 0; i--) {
	const string = 'https://m.worldstarhiphop.com/apple/video.php?v=wshhc8Ew271C2BZE0l31';
	const regex = /^((https?:\/\/.*)(worldstarhiphop.com)((\/apple\/video.php\?v=)|\/videos\/video.php\?v=)([A-Za-z0-9]{20}))/gm;
	var match = string.replace(regex, "\nGroup #1: $1\nGroup #2: $2 \nGroup #3: $3 \nGroup #4: $4\nGroup #6: $6 \n");
}

const end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match  ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test.  ");