说我将HTML包含在字符串变量htmlString
中,我想在html中找到mp3链接的第一个实例,并将该链接存储在变量中。
<html>
...
src="https://example.com/mp3s/2342344?id=24362456"
...
</html>
链接https://example.com/mp3s/2342344?id=24362456
将被提取。
请注意,HTML中还有很多其他的URL,但我只想使用这种格式。
我怎么得到这个?
答案 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之后可以传递其他所有内容。
此图显示了它如何工作:
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. ");