我从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测试了它并且它不匹配。
答案 0 :(得分:2)
您的代码正在搜索包含在<>
中的网址,例如:<http://www.google.com>
:RegexPal。
如果您不希望它搜索/((https?|ftp|dict):[^'">\s]+)/gi
:RegexPal
<>
即可
答案 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。