我搜寻了高低,但无法确定这个问题的确切答案。正则表达式通常如此。所以我想在这里问。

我正在尝试将可在JavaScript中使用的正则表达式放在一起,用指向它们的定位标记替换URL和电子邮件地址的所有实例(不必太严格)。

显然,这通常是在服务器端非常简单地完成的,但是在这种情况下,必须使用纯文本,因此在运行时执行替换的优雅JavaScript解决方案将是完美的。

正如我之前所说,唯一的问题是,我的技能组中有一个巨大的正则表达式形缺口:(

我知道你们当中的一个人虽然能指尖就能找到答案:)

最佳答案

好吧,盲目使用http://www.osix.net/modules/article/?id=586的正则表达式

var emailRegex =
   new RegExp(
   '([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}' +
   '\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.' +
   ')+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)',
   "gi");

var urlRegex =
   new RegExp(
   '((https?://)' +
   '?(([0-9a-z_!~*\'().&=+$%-]+: )?[0-9a-z_!~*\'().&=+$%-]+@)?' + //user@
   '(([0-9]{1,3}\.){3}[0-9]{1,3}' + // IP- 199.194.52.184
   '|' + // allows either IP or domain
   '([0-9a-z_!~*\'()-]+\.)*' + // tertiary domain(s)- www.
   '([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.' + // second level domain
   '[a-z]{2,6})' + // first level domain- .com or .museum
   '(:[0-9]{1,4})?' + // port number- :80
   '((/?)|' + // a slash isn't required if there is no file name
   '(/[0-9a-z_!~*\'().;?:@&=+$,%#-]+)+/?))',
   "gi");

然后
text.replace(emailRegex, "<a href='mailto::$1'>$1</a>");


text.replace(urlRegex, "<a href='$1'>$1</a>");

可能会工作

10-02 05:54