諸事情あって、初めてJavaScriptのプログラムを書いている。大体完成したので、実際にWWWブラウザで動作テストしてみたのだが、うんともすんとも言わない。外部ファイルで定義されているはずの関数が宣言されていないように振る舞っている。
どうにも原因が分からないので、Firefox + Firebug の環境でテストしてみることにした。が、しかし、それでも原因が分からない。やはり関数が宣言されていないように振る舞っている。唯一の手がかりは、当該ページを表示させたときに Firebug が出す "invalid range in character class" というメッセージだけである。でも、これ、なんだろう? Google検索でもあまりいいページが出てこない。
ファイルの文字コードとか、後から思えばあらぬ方向まで可能性を考えてはうまくいかず、悩むこと数時間。正則表現の指定が間違っているというページをGoogle検索経由で発見した。
正則表現!心当たり大ありである。調べたら、やっぱりだ。/^[a-zA-Z'.- ]+$/ という正則表現が含まれていた。もちろん最後のほうの - が文字範囲を表すと解釈されてしまうので、/^[a-zA-Z'. \-]+$/ でなければならない。これを直したら、嘘のように正しく動作し始めた。
後から考えてみると、"range", "character class" というキーワードを見たときに、正則表現を疑うべきだった。そういう思考回路が新たに獲得できたのだから、数時間の苦労も無駄ではなかった、と考えるべきなのだろう。
それにしても、正則表現の誤りが構文解析時のエラーを引き起こすという振舞いは予想外であった。正則表現は、中間言語にコンパイルされる際に何らかの形で処理されるということか。まだまだ精進が足りんなあ。