端からみてたんだけど面白そうなので
>>345氏のコードを実行してみたよ。
^\s*$ を仮に @ に置き換えるとして、gオプションをつけたとき

0.1.().2...3....*.
[email protected].(.).3....*.
[email protected].@().3....*. <-- 2\n@\n3となっているはずの部分に^\s*$がなぜかマッチ
[email protected].@@.3.(..).*.
[email protected].@@.3.@().*. <-- 3\n@\n*となっているはずの部分に^\s*$がなぜかマッチ

となるのがおかしい、と理解していいのかな?
(質問の説明のために実行結果に若干手を加えています)