我正在尝试解析纯文本中的链接,但我遇到了这个非常有用的网站:
http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without
有一个使用该正则表达式匹配网址的例子,但是我在语法上绕过它有些麻烦。
Java中的等价物是什么:
$(function() {
var urlRegEx = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g;
$('#target').html($('#source').html().replace(urlRegEx, "<a href='$1'>$1</a>"));
});
任何帮助或解决方案都是最有效的。
我知道Java中的Pattern
和Matcher
类,但我不知道jquery的.html()
为了实现解决方案做了什么。提前谢谢。
答案 0 :(得分:2)
如果您需要替换匹配的字符串,则无需直接使用Pattern
和Matcher
,使用String#replaceAll
。
String input_str = "http://www.some.site.com?and=value&s=more\nhttp://10.23.46.134\nemail@me.at.site.com";
String regex = "(([A-Za-z]{3,9}:(?://)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:/[+~%/.\\w-]*)?\\??(?:[-+=&;%@.\\w]*)#?(?:[.!/\\\\\\w]*))?";
String res = input_str.replaceAll(regex, "<a href='$0'>$0</a>");
System.out.println(res);
// =>
// <a href='http://www.some.site.com?and=value&s=more'>http://www.some.site.com?and=value&s=more</a>
// <a href='http://10.23.46.134'>http://10.23.46.134</a>
// <a href='email@me.at.site.com'>email@me.at.site.com</a>
正则表达式是相同的,只需删除带有/
修饰符的初始值和最后g
,然后加倍其他反斜杠([...]
内的反斜杠都可以删除\w
除外$0
1}})。可以删除外部捕获组,因为您可以使用{{1}}反向引用来访问替换模式中的整个匹配值。
请参阅regex demo和Java demo。
答案 1 :(得分:0)
您可以执行以下操作(根据您的需要调整正则表达式):
String originalString = "Please go to http://www.stackoverflow.com";
String newString = originalString.replaceAll("http://.+?(com|net|org)/{0,1}", "<a href=\"$0\">$0</a>");