質問: /[都道府県]$/g; prefs.forEach(pref => { if (reg.test(pref)) { console.log(pref + ' is true'); } else { console.log(pref + ' is false'); } }); ``` ### 試したこと gオプションを外すと正常に動作します。 gオプションをつけたままで、配列prefsの大阪府の前の北海道を削除すると正常に動作します。 ちなみに、regex101.comで正規表現を`/[都道府県]$/mg`とし、以下のテストデータを入力すると、大阪府も正常に(具体的には大阪府の「府」が)マッチしました。 TEST EXPRESSION 東京都 東京 神奈川県 神奈川 北海道 大阪府 大阪 ### 補足情報(FW/ツールのバージョンなど) Nodeのバージョンは**v14.16.1**です。 正規表現の考え方が間違っている、または、日本語の問題なのか、ご存じの方、アドバイス&ヒントをお願いします。
回答: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test#using_test_on_a_regex_with_the_global_flag globalフラグが付いているので、前回の'北海道'でのtest結果のlastIndex(3)の影響で、大阪府は空文字扱いになります。 それはそうと、京都がtrueになるのはOKなんですかね、、?