Захват групп с использованием шаблонов повторного использования - PullRequest
1 голос
/ 01 мая 2020

Это проблема на freeCodecamp, в которой я застрял уже несколько дней. Регулярное выражение должно возвращать true для чисел, которые повторяются только 3 раза в строке. При этом числа должны быть разделены двумя пробелами. Вот решение, которое я нашел, которое должно возвращать false на mystring

let myString = '42 42 42 42'
let myRegex = /(\d\d+)(\s)\1\2\1/
let result = myRegex.test(myString) //True

Это решение, которое я получил от get get a hint, но даже это не работает. Он проходит все тесты, кроме 1. Он должен возвращать false, потому что число в строке повторяется 4 раза, а не 3

1 Ответ

0 голосов
/ 01 мая 2020

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

42 42 42 42
   ^

, тогда шаблон будет проходить, когда он не должен. Таким образом, убедитесь, что шаблон также привязан к началу.

^(\d+)(?: \1){2}$

https://regex101.com/r/jnTPbw/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...