我正在编写一个提取URL中参数的函数,并且我正在使用正则表达式来识别URL中是否存在电子邮件以将其删除。
这是我的函数:
function redactEmail() {
var emailRedacted = "";
try {
var urlparams= window.location.search.replace("?","");
var urlparamsdecoded = decodeURIComponent(urlparams);
emailRedacted = urlparamsdecoded;
var emailRegex = /w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+/;
if (emailRegex.test(urlparamsdecoded)) {
emailRedacted = urlparamsdecoded.replace(emailRegex, '[REDACTED EMAIL]');
}
}
catch (e) {}
return emailRedacted;
}
这工作以返回以下内容:
email=[REDACTED EMAIL]
由此:
https://www.test.com/?email=test@test.com
但在某些情况下,此功能会阻止整个网站工作。
我在 GTM 网站的标签中使用此功能,因此我无法访问该网站的源代码。
网站停止工作的一个例子是:
https://www.test.com/?token=_JxY5kgHdKMkO8uSYf77sEl9mJhD7NHwAlrsMfJ-1zg
网站完全停止工作。
我调试了函数,问题出在:
ow_emailRegex.test(ow_urlparamsdecoded)
- 为什么会发生此错误?
- 有没有替代
test()
的替代品?match()
也没有用。
谢谢。
使组内的点或连字符模式成为强制性的,以避免随之而来的+
/*
-量词模式匹配相同的字符:
w+(?:[.-]w+)*@w+(?:[.-]w+)*(?:.w{2,3})+
在此处查看正则表达式如何针对您的字符串优雅地失败。
请注意,所有[.-]?
都变为 [.-]
,整个[.-]w+
组仍然是可选的,因为*
匹配 0 次或多次出现。点在字符类中没有任何特殊之处,这就是我删除反斜杠的原因。
此外,您可以使用非捕获组,因为您对获取这些子匹配项不感兴趣(实际上在 JavaScript 中您不能(。