2016-07-28 69 views
3

作为小白匹配所有关键字字符串中的正则表达式中需要我从社区的一些支持正则表达式来

让说我有这个字符串海峡

  1. www.anysite.com你好演示尝试此链接

  2. anysite.com确实演示链接

  3. http://www.anysite.com另一个

  4. www.anysite.com

  5. http://anysite.com

考虑1-5的整串海峡这里

我希望把所有' anysite.com'转换为可点击的html链接,我正在使用:

str = str.replace(/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, '<a href="$1" target="_blank">$1</a>'); 

此将所有空格分隔单词开始HTTP/HTTPS/FTP到链接作为

<a href="url" target="_blank">url</a> 

所以,线和线已经正确转换。我们所有www.anysite.com转化为链接我再次使用

str = str.replace(/(\b^(http|https|ftp)?(www\.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, '<a href="https://$1" target="_blank">$1</a>'); 

虽然只有当它在STR的最开始发现转换成www.anysite.com链接。所以它转换行号但不行号。

请注意,我已经使用^(HTTP | HTTPS | FTP)(WWW)找到所有WWW不 开始与HTTP/HTTPS/FTP,作为HTTP他们已经被 转换

此外,行号上的链接,它既不是以http或www开头,而是以.com结尾,正则表达式是如何为此。

作为参考,你可以尝试发布这整个字符串到你的Facebook时间轴,它将所有五行转换为链接。检查快照

enter image description here

+0

可能重复[什么是一个很好的正则表达式来匹配一个URL?](http://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a- url) – nicael

+0

你可以用google搜索正则表达式来匹配URL,问题就解决了(你知道如何使用replace,对吗?) – nicael

+0

请校对你的问题标题。 – 2016-07-28 16:50:02

回答

0

^(http|https|ftp)?(www\.)并不意味着 “所有WWW无法启动与HTTP/HTTPS/FTP”,而是“是一个可选的http/https/ftp随后www.开头的字符串。

事实上,^在这个上下文不是否定,而是表示字符串开始的锚。我想你以这种方式使用它是因为它在字符类中使用时的意义([^...]);它是相当棘手的,因为它的意义改变取决于它发现的上下文。

你可以删除它,你应该没问题,因为我没有看到确保字符串不以http/https/ftp开头的点(你改变了那些发生在之前,应该没有剩下)。


编辑:我提到的回顾后却忘了这不是在JS提供...

如果你想使某种否定的,最简单的方法是使用一个负回顾后:

(?<!http|https|ftp)www\. 

这匹配“www。”只有当它不在http,https和ftp之前。

+0

它说'无效的正则表达式',与http://regexr.com/检查它说'Lookbehind不支持在JavaScript – Anant

+0

Woops ,对...不只是删除'^'解决你的问题?因为替代品不是很好(或者使用多个正则表达式来检查它是否包含“www ...”,但不包含“http [https | ftp”),或者制作一个可怕的正则表达式,匹配每个5个或更少的“ www ...“不包含http,https或ftp) – Aaron

+0

这就是我正在尝试但无法做出的,尽管我仍在尝试 – Anant

3

感谢您的帮助,最后的正则表达式,帮助我的是:

//remove all http:// and https:// 
str = str.replace(/(http|https):\/\//ig, ""); 

//replace all string ending with .com or .in only into link 
str = str.replace(/((www\.)?[[email protected]:%._\+~#=]{2,256}\.(com|in))/ig, '<a href="//$1" target="_blank">$1</a>'); 

我用com和。在我的具体要求,否则在这个http://regexr.com/39i0i的解决方案将工作

虽然sill有问题,它不会将缩短的url完全转换为 链接。例如http://s.ly/qhdfTyuiOP将链接到s.ly

还有什么建议吗?