RegEx для сопоставления первого экземпляра URL - PullRequest
0 голосов
/ 04 мая 2019

Скажем, у меня есть HTML в строковой переменной htmlString, и я хочу найти первый экземпляр mp3-ссылки в html и сохранить эту ссылку в переменной.

<html>
...
src="https://example.com/mp3s/2342344?id=24362456"
...
</html>

Будет извлечена ссылка https://example.com/mp3s/2342344?id=24362456.

Обратите внимание, что в html много других URL, но я просто хочу использовать этот в этом формате.

Как мне это получить?

1 Ответ

0 голосов
/ 04 мая 2019

Хотя обычно не рекомендуется разбирать HTML с помощью регулярных выражений, это выражение может помочь вам разработать выражение, если вы хотите / должны получить первый URL-адрес mp3.

^(src=\x22(https:\/\/[a-z]+.com\/mp3s\/[0-9]+\?id=[0-9]+)\x22)[\s\S]*

Я добавил несколько границ, просто чтобы быть в безопасности, который вы можете просто удалить или упростить во второй группе захвата, где ваш желаемый URL-адрес:

 (https:\/\/[a-z]+.com\/mp3s\/[0-9]+\?id=[0-9]+)

Ключ заключается в том, чтобы добавить [\s\S]* так, чтобы он пропустил все остальное после захвата первого URL.

enter image description here

Graph

Этот график показывает, как это будет работать:

enter image description here

Демонстрация JavaScript с 10-миллионным тестом производительности

repeat = 10000000;

start = Date.now();

for (var i = repeat; i >= 0; i--) {
	var string = 'src=\"https://example.com/mp3s/2342344?id=24362456\" src=\"https://example.com/mp3s/08103480132984?id=0a0f8ad0f8\" src=\"https://example.com/mp3s/2342344?id=24362456\" href=\"https://example.com/mp3s/2342344?id=91847890\" src=\"https://example.com/mp3s/2342344?id0980184\"';
	var regex = /^(src=\x22(https:\/\/[a-z]+.com\/mp3s\/[0-9]+\?id=[0-9]+)\x22)[\s\S]*/g;

	var match = string.replace(regex, "$2");
}

end = Date.now() - start;

console.log(match + " is a match ? ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ? ");
...