正则表达式中的noob我需要来自社区的一些支持
假设我有这个字符串 str
www.anysite.com hello demo试试此链接
anysite.com确实是演示链接
www.anysite.com
- 醇>
将1-5视为整个字符串 str 此处
我想转换所有' 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>
因此,行 3 和行 5 已正确转换。现在将所有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才会转换成链接。因此,它会将行号 1 转换为行号 4 。
请注意,我使用了^(http | https | ftp)?(www。)查找所有www没有 以http / https / ftp开头,至于http已经存在 转化
也是行号 2 的链接,它既不以http也不是www开头,而是以.com结尾,正则表达式将如何。
作为参考,您可以尝试将整个字符串发布到您的Facebook时间线,它将所有五行转换为链接。检查快照
答案 0 :(得分:3)
感谢您的帮助,帮助我的最终RegEx是:
//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\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.(com|in))/ig, '<a href="//$1" target="_blank">$1</a>');
我使用.com和.in作为我的具体要求,否则此http://regexr.com/39i0i上的解决方案将起作用
虽然有问题,但它没有将缩短的网址转换为 链接完美。例如http://s.ly/qhdfTyuiOP将链接到s.ly
还有什么建议吗?
答案 1 :(得分:0)
^(http|https|ftp)?(www\.)
并不代表&#34;所有www都不以http / https / ftp&#34;开头而是#34;一个字符串,以可选的http/https/ftp
开头,后跟www.
。
实际上,^
在这个上下文中并不是一个否定,而是一个表示字符串开头的锚点。我想你用这种方式是因为它在字符类([^...]
)中使用时的含义;这是相当棘手的,因为它的含义会根据它所在的上下文而改变。
你可以删除它,你应该没问题,因为我认为没有必要确保字符串不以http/https/ftp
开头(你之前转换了那些事件,应该没有剩下的)。
编辑:我提到了后卫,但忘了它在JS中不可用......
如果你想做出某种否定,最简单的方法就是使用负面的背后隐藏:
(?<!http|https|ftp)www\.
这匹配&#34; www。&#34;只有当它没有http,https或ftp。
之前