フリーの ECMAScript インタプリタ。
Java で記述された JavaScript インタプリタ。

 
言語拡張 - 正規表現
RegExp 拡張は対話式インタプリタでは CLASSPATH 上に パッケージ com.oroinc.text.regex があれば読み込まれます。 この拡張は、Netscape による最新版の JavaScript と同様の、 正規表現に基づく検索と置換の機構を提供します。 これは Netscape の機能のサブセットです。というのは、Netscape 版では 互換性のない拡張を ECMAScript の文法に追加しており、また、マルチスレッドを サポートするように拡張できないからです。 この拡張は OROMatcher パッケージを 基にしているため、その機能の詳しい点はこのライブラリに依存し、 Perl 5 と高い互換性をもっています。正規表現の文法と意味について詳しくは、 ORO の ドキュメンテーションが参考になります。

OROINC は利用できないことも多いのですが、Perl 5 の正規表現についての ドキュメントでも十分役立つはずです。

正規表現は RegExp コンストラクタで生成され、 RegExp 自体の関数でも選んだ String の関数でも 利用できます。

OptionalRegExp 拡張

あなたの環境でクラスパスに OROMatcher がない場合でも、利用できるなら ユーザーには機能を提供したいときは、メインプログラムで、 Fesi.Extension.ORORegExp のかわりに Fesi.Extensions.OptionalRegExp を 読み込むこともできます。こうすると、読込みの時点ではなく 実行時にスクリプトが RegExp オブジェクトを生成しようとした時点で エラーが発生します。これは本パッケージ同梱のインタプリタで使っている手法です。
 

RegExp コンストラクタ

RegExp コンストラクタはテキスト表現から正規表現を生成します。 正規表現は大文字と小文字を区別し 1 ヶ所の置換を行なうものとして 生成されます。書式は最初に使うまでチェックされません。 例を挙げます。
r = new RegExp("[a-z][a-z0-9]*");
/正規表現/ という書式を使って正規表現を生成することはできません。

RegExp オブジェクト

RegExp コンストラクタで生成されたオブジェクトは、その正規表現に関する 大文字と小文字を区別の有無や置き換えのモードといったいくつかの属性を保持します。 認識される属性は以下の通りです。
global
true の場合は replace 関数で全体 (複数) の置換を行ないます。 デフォルトでは false です。
ignoreCase
true の場合は大文字と小文字の違いを無視します。デフォルトでは false です。
属性はいつでも変更できます。正規表現は必要に応じて自動的に再コンパイルされます。 このため compile ルーチンはありません。
正規表現オブジェクトでは以下のルーチンが定義されています。
exec("文字列")
文字列上をこの正規表現で照合します。 null または結果の配列 (後述) を返します。
test("文字列")
文字列上をこの正規表現で照合し、truefalse を 返します (exec より高速です)。

String の追加ルーチン

以下の String ルーチンが追加ないし強化されます。
match(正規表現)
この文字列上を正規表現で照合します。 null または結果の配列 (後述) を返します。
replace(正規表現, 置換文字列)
正規表現が出現する最初の 1 ヶ所 (デフォルト) あるいは すべて (globaltrue の場合) を、 置換文字列で置き換え、変数 $n を推定します。
search(正規表現)
この文字列上を正規表現で照合します。 見つからなければ -1 を、見つかれば一致箇所の開始位置のインデックスを返します。 match より高速です。
split(正規表現[, 上限])
文字列を正規表現の位置で分割し、最大で「上限」個 (デフォルトでは すべて) の部分文字列を返します。引数が正規表現ではない場合には デフォルトの split の動作が使われます。

結果の配列

いくつかのルーチンでは結果の配列が返されます。この配列はプロパティと 配列要素である文字列の両方を持っています。プロパティは以下の通りです。
 
index
一致箇所の開始位置のインデックス。
input
一致した文字列。


この配列の要素は一致箇所数の後に部分一致 (括弧で囲まれた部分) を 置いたものです。
ひとつも一致しなければ、null (false としてテストできます) が 返されます。


メインページに戻る

最終更新日 (原文): 1998 年 3 月 6 日
(翻訳): 1999 年 4 月 1 日