Ответ 1
Вы должны добавить якоря к вашей строке.
Когда у вас есть, например:
aeqwae
Вы говорите, что вывод - правда, но он недействителен, потому что a
не совпадает с e
. Ну, регулярное выражение просто соответствует предыдущему символу (до e
), который является. a
Таким образом, совпадение является действительным. Итак, вы получите это:
[aeqwa]e
Строка, заключенная в скобки, является фактическим соответствием и почему она возвращает true
.
Если вы измените свое регулярное выражение на это:
/^([aeiou]).*\1$/
Добавляя ^
, вы сообщаете ему, что начало совпадения должно быть началом строки, а добавляя $
вы сообщаете ему, что конец совпадения должен быть концом строки. Таким образом, если есть совпадение, вся строка должна совпадать, а это значит, что aeqwae
больше не будет aeqwae
.
Отличным инструментом для тестирования регулярных выражений является Regex101. Попробуйте!
Примечание. В зависимости от вашего ввода может потребоваться установить глобальный (g) или многострочный (m) флаг. Глобальный флаг не позволяет регулярному выражению возвращаться после первого совпадения. Многострочный флаг заставляет ^
и $
соответствовать началу и концу строки (не строки). Я использовал их оба при тестировании с вашим входом.