Regex для соответствия первым двум числам в строке?

У меня есть строка такого формата:

words 9999 words words words 1234 words words words words 3333...

Слова и цифры неизвестны. Кроме того, неизвестно количество слов и цифр, а также их порядок. Так что это тоже нормально:

words words words 9999 words words words words words words 1234 words 9934 4945 6945...

Я хочу сопоставить только первые два числа в строке. Какое регулярное выражение может это сделать?

Обновлено: я не могу просто выбрать первые два числа, так как их может быть огромное количество, и сопоставлять их все — огромная трата времени. В частности, моя тестовая строка содержит более 16 000 чисел.

Просто найдите цифры с помощью \d+ и выберите первые два совпадения? В чем проблема?

trincot 20.05.2024 10:28

@trincot Я внесу это в основной вопрос, но цифр может быть огромное количество. Например, в моей тестовой строке более 16 000.

Eshy 20.05.2024 10:29

Я не предлагаю собирать все спички. Только первые два. Например, используйте regex_iterator. В документации есть пример кода.

trincot 20.05.2024 10:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Для этого вы можете использовать \d+ дважды.

const string = "words 9999 words words words 1234 words words words words 3333";
const pattern = /^\D*(\d+)\D*(\d+)/;
const match = string.match(pattern);

if (match) {
    const firstNumber = match[1];
    const secondNumber = match[2];
    console.info(firstNumber, secondNumber);
}

Кстати, для текста только с одним номером (например, "text 1234") он дает две группы "123" и "4".

Hao Wu 20.05.2024 11:08

@HaoWu Отличное наблюдение, поэтому мы могли бы добавить границу слова \b ко второму \d+, если ничего подобного, например. a123 возникает там, где необходимо извлечь число.

bobble bubble 20.05.2024 12:03

Всего одна идея, код не оптимизирован

  var pattern = /[0-9]+/
  const str = 'words words words 9999 words words words words words words 1234 words 9934 4945 6945';
  const words = str.split(' ');
  const match = str.match(pattern)
  words.splice(words.indexOf(match[0]), 1)
  const str2 = words.join(' ')
  const match2 = str2.match(pattern)
  console.info(match)
  console.info(match2)

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