如何使用正则表达式从href属性中获取链接
问题描述:
我有一个regex
表达式,它返回HTML文件中的所有链接,但它有一个问题:它不是仅返回链接,如http://link.com
,它还返回href =“ (href="http://link.com
)我能做些什么,只得到links
不具有href="
如何使用正则表达式从href属性中获取链接
这是我的正则表达式:?
/href="(http|https|ftp|ftps)\:\/\/[-a-zA-Z0-9.]+\.[a-zA-Z]{2,3}(?:\/(?:[^"<=]|=)*)?/g
全码:
var source = (body || '').toString();
var urlArray = [];
var url;
var matchArray;
// Regular expression to find FTP, HTTP(S) URLs.
var regexToken = /href="(http|https|ftp|ftps)\:\/\/[-a-zA-Z0-9.]+\.[a-zA-Z]{2,3}(?:\/(?:[^"<=]|=)*)?/g;
// Iterate through any URLs in the text.
while((matchArray = regexToken.exec(source)) !== null)
{
var token = matchArray[0];
token = JSON.stringify(matchArray[0]);
token = matchArray[0].toString();
urlArray.push([ token ]);
}
答
RegExp#exec
将存储由您的模式中定义的捕获组捕获的所有内容。您可以通过[1]
索引访问第1组。
使用
var token = matchArray[1];
而且,我相信你可以缩短正则表达式来只是
/\bhref="((?:http|ftp)[^"]+)"/g
如果您确定的值总是双引号内。请参阅this demo。
为什么这么复杂呢? '/ href =“([^”] +)“/ g'(如果你知道输入将总是有双引号的属性值) –
你不应该用正则表达式解析HTML,使用合适的解析器。发生](http://*.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)。 – Amadan
@WiktorStribiżew我试过了,但它也返回给我的电子邮件地址,我不想这 – Valip