【发布时间】:2012-03-19 23:44:13
【问题描述】:
我在这里查看了许多其他关于 JavaScript 的负面回溯的问题,但我似乎无法模仿它们。我有以下正则表达式:
\b((?:http[s])?\S+\.\S+\.(?:\S+\.?){1,4})(?<!@)\b`
这个正则表达式的基础是它匹配如下网址:
-
www.msn.com - 或
http://www.msn.com - 或
https://www.google.com - 或
http://msdn.microsoft.com。
但是,它也匹配name@d1.d2.d3.d4,因为@ 符号后面有许多域名。我需要对该 @ 符号执行否定的后视操作。
希望有人能帮帮我!
更新
更新以包含我用来从匹配文本中创建超链接的替换字符串。
replace(webLinkPattern, "<a href=\"http://$2\" target=\"_blank\" onclick=\"preventDualEditing(event)\">$2</a>");
更新 2 - 答案
ts = ts.replace(webLinkPattern, function (url) {
if (url.indexOf('@') != -1) {
return url;
}
return url.replace(webLinkPattern, "<a href=\"http://$&\" target=\"_blank\" onclick=\"preventDualEditing(event)\">$&</a>");
});
【问题讨论】:
-
您希望它匹配整个电子邮件,还是仅匹配电子邮件的域部分?
-
我根本不希望它与电子邮件匹配 - 我有另一个与电子邮件地址匹配的正则表达式。看,我必须把结果变成一个链接,所以我需要确保我没有收到电子邮件地址。
-
而不是使用
\S,为什么不使用[]将您的设置限制为有效字符 -
@Joseph 这是一个相当长的网址字符列表,不是吗?
-
另请参阅Javascript: negative lookbehind equivalent? 以及此more comprehensive answer,其中完整描述了如何匹配和替换正面和负面的lookbehinds。这是这些问题的重复。
标签: javascript regex