Это распространенное заблуждение о том, как работает регулярное выражение.
Несмотря на то, что * является жадным и не привязан в начале строки, механизм регулярных выражений все равно начнет смотреть с начала строки. В случае «/ o + /» он не совпадает в позиции 0 (например, «f»), но, поскольку «+» означает один или несколько, он должен продолжать сопоставление (это не имеет ничего общего с жадностью) до совпадение найдено или все позиции оценены.
Однако в случае "/ o * /", который, как вы знаете, означает 0 или более раз, когда он не совпадает в позиции 0, механизм регулярных выражений будет корректно останавливаться в этой точке (как и должно быть, потому что o * просто означает, что o является необязательным). Существуют также соображения производительности, поскольку «o» не является обязательным, зачем тратить больше времени на его поиск?