console.info("<p>[email protected]</p>".match(/([a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10})/g))
["<p>[email protected]"]
Может ли кто-нибудь помочь мне понять, почему символы < > соответствуют этому регулярному выражению? Я всегда думал, что . в классе символов [] интерпретируется буквально.
Когда я удаляю ., он больше не возвращает этот тег абзаца.
Это соответствует диапазону .-_ от 46 до 95 ascii, где < и > равны 60 и 62.
- в конце класса символов.
Дополнительное примечание ко всему «регулярному выражению для адресов электронной почты» — это интересно читать по этому вопросу.
Пожалуйста, взгляните на эти сайты: список доменов верхнего уровня; действительные/недействительные адреса; регулярное выражение для адреса электронной почты RFC822



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашем регулярном выражении есть потенциальная скрытая проблема:
([a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10}
Если вы внимательно посмотрите на первый класс символов, то увидите, что дефис определяет диапазон между . и _. Это может быть непреднамеренное включение символов, которые вам не нужны. Попробуйте переместить дефис в конец класса символов:
([a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,10}
Вот демонстрация регулярного выражения для [a-zA-Z0-9.-_+]до и после. Обратите внимание, что @ и ^ сопоставлялись в исходной версии, но затем перестали сопоставляться после перемещения - в конец класса.
«Дох! да так и сделал.
Вы сопоставляете .-_ (все символы в диапазоне от . до _), который включает все символы в диапазоне ASCII 46–95.
Чтобы это исправить, избегайте -, написав \-
([a-zA-Z0-9.\-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10})
^ note backslash here
Вы также можете просто изменить порядок. ._-
Что ж, если мы обсуждаем трюки, вы также можете поставить ] в качестве первого символа предметов набора. Приводит к любопытному регулярному выражению []-], которое соответствует ] или -
.-_выглядит подозрительно. Между.и_есть мир.