У меня очень длинная строка, и я хочу найти номер 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"].Это может быть дубликат, но это не дубликат того. Мне все еще не ясно, о чем спрашивает OP, поскольку его регулярное выражение, похоже, работает отлично.
Я сделал вам фрагмент, чтобы показать минимальный воспроизводимый пример
Я просто хочу найти одно число «29022-11-5», а не эти значения [«29022», «11»]



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


Это может быть то, что вы ищете, если я правильно понимаю:
str.match(/[0-9]{2,7}-[0-9]{2}-[0-9]/)
Вы получаете ["29022-11-5", "29022", "11"], потому что у вас есть () внутри вашего регулярного выражения, что означает, что он сгруппирует результат, но если вы его удалите, вы получите результат без группы, и это должен быть ваш желаемый результат.
Вы можете использовать флаг /g, чтобы найти все совпадения, и использовать границу слова \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));
});
в чем именно проблема?: Мне кажется, это правильный ответ.