У меня есть строка такого формата:
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 чисел.
@trincot Я внесу это в основной вопрос, но цифр может быть огромное количество. Например, в моей тестовой строке более 16 000.
Я не предлагаю собирать все спички. Только первые два. Например, используйте regex_iterator. В документации есть пример кода.





Для этого вы можете использовать \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".
@HaoWu Отличное наблюдение, поэтому мы могли бы добавить границу слова \b ко второму \d+, если ничего подобного, например. a123 возникает там, где необходимо извлечь число.
Всего одна идея, код не оптимизирован
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)Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Просто найдите цифры с помощью
\d+и выберите первые два совпадения? В чем проблема?