var sourceStr = "前後に不要な文字https://yahoo.jp/games/some?yh=1抜き出せるかな?yh=1"

// 2. URL文字列抜き出し。
// let gameURLPattern = "(https://yahoo.jp).+(yh=1)" // greedy

let gameURLPattern = "(https://yahoo.jp).*?(yh=1)"

正規表現によるとあるサイトのURL文字列の抜き出しコードの一部です。
下のパターンを使うとなぜうまくいくのでしょうか?

コメントアウトしてるのが最初に自分で書いてうまくいかなかったパターンです。
https://yahoo.jp/games/some?yh=1 にマッチさせたい。

https://yahoo.jp/games/some?yh=1抜き出せるかな?yh=1
しかし、これがマッチする。

nsregularexpression non greedy で検索するとスタックオーバーフローの良記事がヒットし問題はすぐ解決したのですが、なぜうまくいくかよくわかりません。