用于检测超链接的正则表达式

时间:2011-08-22 21:04:09

标签: javascript regex

我从WMD showdown.js文件中获得了这个正则表达式模式。

/<((https?|ftp|dict):[^'">\s]+)>/gi

,代码是:

text = text.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,"<a href=\"$1\">$1</a>");

但是当我将text设置为http://www.google.com时,它不会将其锚定,而是按原样返回原始文本值(http://www.google.com)。

P.S:我用RegexPal测试了它并且它不匹配。

3 个答案:

答案 0 :(得分:2)

您的代码正在搜索包含在<>中的网址,例如:<http://www.google.com>RegexPal

如果您不希望它搜索/((https?|ftp|dict):[^'">\s]+)/giRegexPal

,只需将其更改为<>即可

答案 1 :(得分:0)

只要您知道您的网址是以http://或https://开头,或者您可以使用的任何网址:

/((https?|s?ftp|dict|www)(://)?)[A-Za-z0-9.\-]+)/gi

表达式将匹配,直到遇到URL中不允许的字符,即不是A-Za-z\.\-。但是,它不会检测google.com形式的任何内容或域名之后的任何内容,如参数或子目录路径等。如果您要求您只需选择终止终止条件,就像您在上面所做的那样你的正则表达式。

我知道这似乎毫无意义,但如果您希望显示名称缩写而不是整个网址,那么它可能会很有用。

答案 2 :(得分:0)

您可以使用:

var re = /(http|https|ftp|dict)(:\/\/\S+?)(\.?\s|\.?$)/gi;

使用:

 el.innerHTML = el.innerHTML.replace(re, '<a href=\'$1$2\'>$1$2<\/a>$3');

也匹配句子末尾的网址。

但是你需要非常小心这种技术,确保元素的内容或多或少是纯文本而不是复杂的标记。正则表达式并不意味着,也不擅长处理或解析HTML。