我在使用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的新手,如果我的问题不清楚,请原谅我。
答案 0 :(得分:1)
我是linkify project的作者。根据设计,linkify()
函数仅匹配具有scheme元素的URL。如果没有这个限制,就会有太多误报。 (几乎任何字符串或子字符串都是有效的URI。)
答案 1 :(得分:0)
添加此行以确保url
字符串是链接:
url = url.replace(/^(?!(?:http|https|ftp):\/\/)/i, 'http://');