JS正则表达式 - 将“任何”纯文本hostname / url / ip转换为链接

时间:2011-09-09 12:28:35

标签: javascript regex

我一直在寻找一个JS正则表达式,它将纯文本URL或主机名转换为可点击链接,但我找到的脚本都没有达到我的要求。不幸的是,我吮吸正则表达式并且无法修改表达式以按照我想要的方式工作。

我希望转换为链接的纯文本是:

  1. 任何与http(s):,ftp(s):,mailto:或盯着的东西 文件:
  2. 使用domain.tld [:端口] [路径] [文件] [查询字符串]
  3. any.sub.domain.tld [:端口] [路径] [文件] [查询字符串]
  4. 0 / 255.0 / 255.0 / 255.0 / 255 [:端口] [路径] [文件] [查询字符串]
  5. 的locahost [:端口] [路径] [文件] [查询字符串]
  6. [*] =可选。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果您可以忍受误报,例如something.notavalidtld999.999.999.999匹配,那么您正在寻找的可能是这样的。 (否则,它会得到more messy。)

在字符串的开头开始匹配。

^(

匹配以http / https / ftp /...

开头的任何内容
((https?|ftps?|mailto|file):.*?)

匹配以下所有内容。

|

可选择匹配http / https / ftp / ...后跟:和至少一个/

((https?|ftps?|mailto|file):/+)?

匹配IP地址......

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

...或域名(带有可选的用户名/密码,也与电子邮件地址匹配)...

|([\w\d.:_%+-]+@)?([\w\d-]+\.)+[\w\d]{2,}

...或localhost

|localhost)

可选地后跟一个端口号。

(:\d+)?

可选地后跟任何路径/查询字符串。

(/.*)?

确保字符串在此处结束。

)$

所有上述部分应该连接在一起,两者之间没有任何空格。

我没有广泛测试过,所以我可能错过了一些东西。但至少你有一个起点。