jmrware linkify不接受没有架构的URL(http)

时间:2012-08-27 13:12:40

标签: javascript regex string url linkify

我在使用javascript正则表达式将linkify'ing url链接到可点击链接时遇到了一个奇怪的问题。

在so.com上挖掘了很多东西之后,我开始使用jmrware/LinkifyURL.js将网址转换为可点击的链接。但是当尝试转换没有架构的网址((htt | ft)ps)时,它根本无法识别网址。

例如:

  

http://www.google.com(接受)
  www.google.com(不接受)
  google.com(不接受)。

任何人都可以帮助我找到解决方案。

编辑: 在我的场景中,我必须接受用户可以输入任何URL的文本区域中的用户输入。我必须在网站上显示时链接用户输入中找到的任何网址。

这是我正在尝试链接的测试内容。

> http://example.com:80                                            (linkified)<br/>
> http://example.com:80/path/                                      (linkified)<br/>
> http://example.com:80/path/file.txt                              (linkified)<br/>
> http://example.com:80/path/file.txt?query=val&var2=val2          (linkified)<br/>
> http://example.com:80/path/file.txt?query=val&var2=val2#fragment (linkified)<br/>
> http://example.com/(file's_name.txt)                             (linkified)<br/>
> http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7348]                 (linkified)<br/>
> http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7348]/file.txt        (linkified)<br/>
> http://youtube.com:80/path/file.txt?query=val&var2=val2          (linkified)<br/>
> www.example.me                                                   (not linkified)<br/>
> example.me                                                       (not linkified)<br/>

在上面的代码中,最后两个字符串没有链接,我想成为。我在JavaScript RegExp中尝试了负面的lookbehind,即便没有运气。

?!

(((HTTP | FTP | HTTPS | FTPS)://)^ [A-z0-9-] +([A-z0-9-] +)+(。* [/?]。 )?) - 负面的背后隐藏

我是so.com的新手,如果我的问题不清楚,请原谅我。

2 个答案:

答案 0 :(得分:1)

我是linkify project的作者。根据设计,linkify()函数仅匹配具有scheme元素的URL。如果没有这个限制,就会有太多误报。 (几乎任何字符串或子字符串都是有效的URI。)

答案 1 :(得分:0)

添加此行以确保url字符串是链接:

url = url.replace(/^(?!(?:http|https|ftp):\/\/)/i, 'http://');