.NET API, который я вызываю, использует следующее регулярное выражение для проверки адресов электронной почты:
var isValidFormat = Regex.IsMatch(_emailAddress,@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
Это пришло из предложения в документации Microsoft здесь .
Теперь я хочу реализовать ту же проверку на стороне клиента в моем коде TypeScript, но я пытаюсь настроить регулярное выражение на то, которое будет работать в JS. Взять версию без двойных кавычек и избежать одиночной кавычки с обратной косой чертой следующим образом ...
^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&\'\*\+/=\?\^`{}|~\w])*)(?<=[0-9a-z])@))(?([)([(\d{1,3}.){3}\d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$
... и работать через отладчик Chrome, это не радует:
ERROR SyntaxError: Invalid regular expression: /^(?(")(".+?(?<!\)"@)|(([0-9a-z]((.(?!.))|[-!#$%&'*+/=?^`{}|~w])*)(?<=[0-9a-z])@))(?([)([(d{1,3}.){3}d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$/: Invalid group
at new RegExp (<anonymous>)
(remainder of call stack omitted)
Как я могу устранить ошибку недопустимой группы, чтобы я мог использовать одно и то же регулярное выражение как на стороне сервера, так и на стороне клиента? Мне известны общие проблемы с проверкой адресов электронной почты и почему это можно считать плохой идеей, но требуется, чтобы я реализовал ту же проверку на стороне клиента, что и на стороне сервера.
EDIT
Выполнение вышеупомянутого через https://regex101.com/, Я вижу: «Предыдущий токен не поддается количественной оценке» со ссылкой на первый и последний вопросительные знаки.