RegEx用于匹配URL的第一个实例

时间:2019-05-04 16:41:10

标签: javascript html regex parsing regex-group

说我将HTML包含在字符串变量htmlString中,我想在html中找到mp3链接的第一个实例,并将该链接存储在变量中。

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

链接https://example.com/mp3s/2342344?id=24362456将被提取。

  

请注意,HTML中还有很多其他的URL,但我只想使用这种格式。

我怎么得到这个?

1 个答案:

答案 0 :(得分:0)

虽然通常不建议使用正则表达式来解析HTML,但是如果您希望/必须获得第一个mp3 URL,this expression可能会帮助您设计一个表达式。

^(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

此图显示了它如何工作:

enter image description here

具有1000万次性能基准的JavaScript演示

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.  ");