написать регулярное выражение для JavaScript для повторения групп захвата - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь написать средство проверки формата для проверки правильности введенного аргумента, поэтому я использую регулярное выражение

function checkFormat(rcvString)
{
    let formatRegex = /(\s*?(\s*?[0-9]*\s*?,\s*?[0-9]*\s*?)\s*?),\1$/;
    return formatRegex.test(rcvString);
}
var str = "(35, 6), (   5,65) , (3,3 )"
console.log(checkFormat(str));

Переменная str может иметь несколько групп захвата, и пробел необязателен "(35, 6), ( 5,65) , (3,3 ) and so on", но formatRegex не работает

1 Ответ

1 голос
/ 02 ноября 2019

Вы не можете повторять группы захвата, используя квантификатор, потому что буфер будет отслеживать только последнюю найденную группу. Но вот исправленная версия вашего регулярного выражения:

let formatRegex = /\(\s*\d+\s*,\s*\d+\s*\)(?:\s*,\s*\(\s*\d+\s*,\s*\d+\s*\))*/;
return formatRegex.test(rcvString);

Вот демонстрационная версия регулярного выражения, показывающая, что шаблон работает для вашего тестового ввода.

Демо

Шаблон регулярного выражения в основном просто соответствует одному кортежу в скобках, за которым следует ноль или более запятых и еще один кортеж. Вот объяснение логики регулярных выражений, используемой для первого кортежа (остальная часть шаблона в основном просто повторяет это):

\(        match a (
    \s*   zero or more spaces
    \d+   a number
    \s*   zero or more spaces
    ,     a comma
    \s*   zero or more spaces
    \d+   the second number
    \s*   zero or more spaces
\)        match a (
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...