そういやrhinoはどうなんだろう?

rhinoというのはJavaで書かれたJavaScript処理系である。
JavaJavaScriptがごっちゃになっている人にはわけがわからんだろう)
これもJavaScriptである以上正規表現は使えるはずである。
でも、Javajava.util.regexpを使っているのだろうか?
というわけで試してみた。


$alias rhino="java -jar js.jar"
$cat reg_test.js
re = new RegExp("[0-9]{5}","i");
if("a12345".match(/[0-9]{5}/i){
print("matchしたで");
}else{
print("あかんなー");
}
$
$rhino reg_test.js
matchしたで
どうやら、e_c_e_tの望む結果が出たようである。
まとめ:
Groovyの正規表現Java 1.4のライブラリのRegExpオブジェクトに対応する。
ただし、このライブラリがひとくせあって、
Stringインスタンスにマッチさせる場合は暗黙に^(行頭)と$(行末)で囲まれるようである。
したがって以下がfalseと扱われるのは
"a12345" ==~ "\\d{5}" // false
内部ではこのように評価されているかららしい。
"a12345" ==~ "^\\d{5}$" // false
8へぇ。