Разбираемся с шестью флагами, которые меняют поведение регулярного выражения, на примерах.
Флаги — это переключатели, которые добавляются после регулярного выражения и меняют его общее поведение. В JavaScript их шесть. g(global) не останавливается на первом совпадении, а находит все. Без этого флага захватывается только первое.
i(ignoreCase) отключает учёт регистра. m(multiline) заставляет ^ и $ соответствовать не всей строке, а началу и концу каждой строки текста. Это необходимо при работе с многострочным текстом.
s(dotAll) заставляет точку (.) включать и символ перевода строки. u(unicode) корректно интерпретирует кодовые точки Unicode и экранирование свойств \p{...}. y(sticky) допускает только совпадения, начинающиеся точно с позиции lastIndex.
Включайте и выключайте чипы флагов в этом тестере и сравнивайте, как меняется один и тот же шаблон. Особенно наглядно видно, как количество результатов зависит от наличия g, — так понимание приходит быстрее.