Регулярное выражение с обратным отсчетом как число повторений

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

Сопоставьте целое число как группу 1, затем сопоставьте \1 целые числа.

Этот (\d+)(\s+\d+){\1} несчастливо не разрешен, но я нахожу это хорошим описанием того, что я пытаюсь достичь.

1 ответ

Вы можете сделать что-то вроде этого

var numbers = "3 7 6 5 4 3 2 1"; // list of numbers
var iter = numbers.split(" ")[0] // get first number
numbers = numbers.substr(iter.length+1) // chop off first number, and the space that follows it you can comment
var rex = new RegExp("(?:\\d(?: |$)){" + iter + "}","") // create regex
alert((numbers.match(rex)||[]).join("\n")) // a sample alert that joins the array to a string with an element on each line

В качестве альтернативы, если вы хотите, чтобы первая цифра определяла количество вхождений в том же массиве, несколько изменений делают возможным

var numbers = "3 7 6 5 4 3 2 1"; // list of numbers
var iter = numbers.split(" ")[0] // get first number
var rex = new RegExp("(?:\\d(?: |$)){" + (+iter+1) + "}","") // create regex
alert((numbers.match(rex)||[]).join("\n")) // a sample alert that joins the array to a string with an element on each line

licensed under cc by-sa 3.0 with attribution.