| ★ wanayoo — archive 1999 http://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp | Nouvelle recherche | Portail wanayoo |
pattern
flags
g
i
m
y
lastIndex プロパティによって示された位置からのみマッチするようになります(それより後の位置からのマッチは試みません)。このフラグは、 特殊文字 "^" が持つ開始位置でのみマッチする性質を、lastIndex プロパティの値を変更することにより文字列中の任意の位置で効果的に用いることを可能にします。
コンストラクタ関数を使うとき、通常の文字列のエスケープルール(文字列の中に \ 付きの特別な文字列が含まれているときにはその文字をエスケープするルール)に従う必要があります。例えば、以下は等価です。:
var re = new RegExp("\\w+");
var re = /\w+/;
リテラルフォーマットでの引数はクオーテーションマークで囲みませんが、コンストラクタ関数での引数はクオーテーションマークで囲むことに注意してください。ですから、以下の表現は同じ正規表現を生成していることになります。:
/ab+c/i;
new RegExp("ab+c", "i");
| 文字 | 意味 |
\ |
通常は文字通りに扱われる文字に対して、次の文字は特殊であり、文字通り解釈させないように指示します。 例えば、 あるいは、 通常は特殊文字として扱われる文字に対して、 次の文字は特殊文字ではなく、文字通りに解釈するように指示します。 例えば、* は直前の文字の 0 回以上の出現にマッチする特別な文字です。つまり、 |
^ |
入力の始まりにマッチします。複数行フラグが真に設定されている場合、改行文字の直後にもマッチします。 例えば、 |
$ |
入力の終端にマッチします。複数行フラグが真に設定されている場合、改行文字の直前にもマッチします。 例えば、 |
* |
直前の文字の 0 回以上の繰り返しにマッチします。例えば、 |
+ |
直前の文字の 1 回以上の繰り返しにマッチします。 |
? |
直前の文字の0回か1回の繰り返しにマッチします。 例えば、
先読み表現でも使えますが、それについてはこの表の |
. |
(この文字は小数点です) 改行文字(\n、\r、 \u2028、あるいは、\u2029)を除いたあらゆる 1 文字にマッチします( [\s\S] という正規表現を使えば、改行文字を含めたあらゆる文字にマッチさせることができます)。 例えば、 |
(x) |
例えば、 |
(?:x) |
|
x(?=y) |
|
x(?!y) |
|
x|y |
例えば、 |
{n} |
例えば、 |
{n,} |
例えば、 |
{n,m} |
例えば、 |
[xyz] |
文字の集合。 囲まれた文字のどんな 1 文字にもマッチします。 ハイフンを用いて文字の範囲を指定することができます。 例えば、 |
[^xyz] |
文字の集合の否定または補集合。つまり、括弧で囲まれていないどんな文字にもマッチします。 ハイフンを用いて文字の範囲を指定することができます。 例えば、 |
[\b] |
バックスペース (backspace)
にマッチします。 ( |
\b |
スペースなどで区切られた単語 (word boundary)
にマッチします。( 例えば、 |
\B |
単語の区切りではない文字にマッチします。 例えば、 |
\cX |
例えば、 |
\d |
Basic Latin アルファベットにおける数字 (digit character)
にマッチします。 注意:Firefox 2 とそれ以前では、あらゆるアルファベット中における数字にマッチします。(bug 378738 )【訳注: ここでのアルファベットの意味は、ラテン文字に限らない、表音文字の総称です。つまり、例えば、1などの全角数字にもマッチするということです。】 例えば、 |
\D |
Basic Latin アルファベットにおける数字以外の文字にマッチします。 注意:Firefox 2 とそれ以前では、全てのアルファベットにおける数字以外の文字にマッチします。(bug 378738 )【訳注: ここでのアルファベットの意味は、ラテン文字に限らない、表音文字の総称です。つまり、例えば、1などの全角数字にはマッチしないということです。】 例えば、 |
\f |
改ページ(FF) (form-feed) にマッチします。 |
\n |
改行(LF) (linefeed) にマッチします【訳注: n は newline から】 。 |
\r |
行頭復帰(CR) (carriage return) にマッチします。 |
\s |
スペース (space) 、タブ、改ページ、改行、その他のユニコードでのスペースを含む、単一の空白文字にマッチしますequivalent_s 。 例えば、 |
\S |
空白以外の単一の文字にマッチしますequivalent_S 。 例えば、 |
\t |
タブ (tab) にマッチします。 |
\v |
垂直タブ (a vertical tab) にマッチします。 |
\w |
アンダースコアを含む、Basic Latin アルファベット からなる任意のアルファベットの文字にマッチします【訳注: w は word から】
。 例えば、 |
\W |
Basic Latin アルファベットからなる単語を構成するものではない、あらゆる文字にマッチします。 例えば、 |
\n |
例えば、 |
\0 |
NUL 文字【訳注: NUL は null の略であり、0 を意味するドイツ語】 にマッチします。 この後ろに他の数字を続けてはいけません。 |
\xhh |
|
\uhhhh |
|
リテラル表記は、その表現が評価されたときに、正規表現を生成して提供します。リテラル表記を使用するのは、その正規表現が常に同じであり続けるだろうと考えられるときにしてください。例えば、もし正規表現をループで使用するためにリテラル表記を使うとき、その正規表現は繰り返し処理毎に再生成されないでしょう。
正規表現オブジェクトのコンストラクタ、例えば、new RegExp("ab+c") は、正規表現のランタイムを提供します。コンストラクタ関数を使用するのは、正規表現のパターンが変更される可能性があるとき、もしくは、パターンがわからず、ユーザの入力のような他のソースから正規表現を作成するときにしてください。
[\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]
[^\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]
Regexp インスタンスから継承されているプロパティについては、Regexp インスタンスの プロパティ を参照してください
Function.prototype から継承されるプロパティ
caller, constructor, length, name
Regexp インスタンスから継承されているメソッドについては、Regexp インスタンスの メソッド を参照してください
RegExp オブジェクトは、自分自身のメソッドを持っていませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。
RegExp インスタンス </div>RegExp</code> インスタンスは、Core_JavaScript_1.5_Reference:Global_Objects:RegExp:prototypeRegExp.prototype を継承します。プロトタイプオブジェクトへの変更は、<code>RegExp インスタンスの全てに伝播します。
=== プロパティ ===
RegExp プロパティのいくつかは(Perl ライクな)長い名前と短い名前の両方を持っていることに注意してください。【訳注: それらは 1.5 以前のバージョンでの実装であり、非推奨の機能です。】
どちらの名前でも常に同じ値を参照します。Perl は JavaScript の正規表現のモデルとなっているプログラミング言語です。
以下のスクリプトは、String インスタンスから継承された replace メソッドを使用して、first last 形式のフォーマットでの名前にマッチさせ、last, first 形式のフォーマットで出力しています。置換テキスト中で、そのスクリプトは、$1 と $2 を使用して、それぞれ対応する正規表現パターンでマッチする括弧がキャプチャした結果を指定しています。
var re = /(\w+)\s(\w+)/; var str = "John Smith"; var newstr = str.replace(re, "$2, $1"); print(newstr);
これは、"Smith, John" を表示します。
この例は、複数行の入力の個々の行にマッチさせるために正規表現で sticky フラグを用いる方法をデモしています。
var text = "First line\nsecond line"; var regex = /(\S+) line\n?/y; var match = regex.exec(text); print(match[1]); // "First" を出力します print(regex.lastIndex); // 11 を出力します var match2 = regex.exec(text); print(match2[1]); // "Second" を出力します print(regex.lastIndex); // "22" を出力します var match3 = regex.exec(text); print(match3 === null); // "true" を出力します
try { … } catch { … } を使うことで、sticky フラグをサポートしているかどうか、実行時にテストすることができます。このとき、eval(…) 、もしくは、RegExp(regex-string, flags-string) のどちらかの表現を用いる必要があります(なぜなら、/regex/flags という記法は、コンパイル時に処理され、その結果、catch に入る前に例外が発生してしまうからです)。例:
var supports_sticky;
try { RegExp('','y'); supports_sticky = true; }
catch(e) { supports_sticky = false; }
alert(supports_sticky); // alerts "false" in Firefox 2, "true" in Firefox 3
Page last modified 08:33, 2008年7月24日 by Potappo