RegEx для сопоставления URL с идентификаторами видео - PullRequest
2 голосов
/ 10 мая 2019

Я пытаюсь создать ярлык для 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 Ответ

1 голос
/ 11 мая 2019

Я добавил несколько групп захвата к этому выражению , чтобы его было легко изменить / изменить и понять:

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

Я не закрывал правую сторону, используя $, чтоВы можете сделать это, если хотите.

URL-адреса, которые вы хотите сопоставить, представлены в двух мобильных и веб-версиях, которые я добавил на всякий случай для обоих протоколов.Если это не нужно, вы можете удалить его.

enter image description here

Описательный график RegEx

График показывает, как он работает, и вы можете проверить другие выражения в этой ссылке :

enter image description here

Базовый тест производительности

Этот фрагмент JavaScript возвращает время выполнения цикла 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. ? ");
...