Сложное регулярное выражение в JavaScript?

У меня очень длинная строка, и я хочу найти номер CAS из этой строки, которая имеет некоторый шаблон, как показано ниже:

2 to 7 digits-2 digits-1 digit

пример :

1154-12-6, 127946-96-2

Я использую следующее регулярное выражение, чтобы получить это число:

str.match(/([0-9]{2,7})-([0-9]{2})-[0-9]/)

но для примера, состоящего из «29022-11-5», он дает мне [«29022-11-5», «29022», «11»].

Пожалуйста, дайте мне знать, как я могу это сделать.

console.info(

    "A long string with a number 29022-11-5 somewhere".match(/([0-9]{2,7})-([0-9]{2})-[0-9]/)
)    

// it is giving me ["29022-11-5", "29022", "11"].

в чем именно проблема?: Мне кажется, это правильный ответ.

Pointy 29.06.2018 15:27

Это может быть дубликат, но это не дубликат того. Мне все еще не ясно, о чем спрашивает OP, поскольку его регулярное выражение, похоже, работает отлично.

Pointy 29.06.2018 15:29

Я сделал вам фрагмент, чтобы показать минимальный воспроизводимый пример

mplungjan 29.06.2018 15:32

Я просто хочу найти одно число «29022-11-5», а не эти значения [«29022», «11»]

Sanket Tarodekar 29.06.2018 15: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
4
155
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это может быть то, что вы ищете, если я правильно понимаю:

str.match(/[0-9]{2,7}-[0-9]{2}-[0-9]/)

Вы получаете ["29022-11-5", "29022", "11"], потому что у вас есть () внутри вашего регулярного выражения, что означает, что он сгруппирует результат, но если вы его удалите, вы получите результат без группы, и это должен быть ваш желаемый результат.

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

Вы можете использовать флаг /g, чтобы найти все совпадения, и использовать границу слова \b, чтобы убедиться, что ваш номер не является частью большего совпадения. Вы можете опустить группы захвата, если не используете их.

\b[0-9]{2,7}-[0-9]{2}-[0-9]\b

let strings = [
  "29022-11-5",
  "1154-12-6, 127946-96-2"
];

let pattern = /([0-9]{2,7})-([0-9]{2})-[0-9]/g;

strings.forEach((s) => {
  console.info(s.match(pattern));
});

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