Почему точка в классе символов не соответствует только буквальной точке

console.info("<p>[email protected]</p>".match(/([a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10})/g))

["<p>[email protected]"]

Может ли кто-нибудь помочь мне понять, почему символы < > соответствуют этому регулярному выражению? Я всегда думал, что . в классе символов [] интерпретируется буквально.

Когда я удаляю ., он больше не возвращает этот тег абзаца.

.-_ выглядит подозрительно. Между . и _ есть мир.
Federico klez Culloca 30.05.2019 17:21

Это соответствует диапазону .-_ от 46 до 95 ascii, где < и > равны 60 и 62.

The fourth bird 30.05.2019 17:22
Примечание для себя: Всегда ставьте - в конце класса символов.
d-_-b 30.05.2019 17:25

Дополнительное примечание ко всему «регулярному выражению для адресов электронной почты» — это интересно читать по этому вопросу.

James Thorpe 30.05.2019 17:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашем регулярном выражении есть потенциальная скрытая проблема:

([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.-_+]до и после. Обратите внимание, что @ и ^ сопоставлялись в исходной версии, но затем перестали сопоставляться после перемещения - в конец класса.

«Дох! да так и сделал.

d-_-b 30.05.2019 17:21

Вы сопоставляете .-_ (все символы в диапазоне от . до _), который включает все символы в диапазоне ASCII 46–95.

Чтобы это исправить, избегайте -, написав \-

([a-zA-Z0-9.\-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10})
            ^ note backslash here

Вы также можете просто изменить порядок. ._-

Get Off My Lawn 30.05.2019 17:27

Что ж, если мы обсуждаем трюки, вы также можете поставить ] в качестве первого символа предметов набора. Приводит к любопытному регулярному выражению []-], которое соответствует ] или -

Wyck 30.05.2019 17:39

Другие вопросы по теме