Это из-за скобки вокруг всего выражения: он определяет захваченную группу.
Если вы не используете флаг g
, match
возвращается в массив:
Здесь захваченная группа представляет собой целую строку.
То, что вам кажется, это
"$123 $149 $150".match(/\$\d+(\.\d{0,2})?/g)
, который возвращает
["$123", "$149", "$150"]