概要
パターンに従ったテキストにマッチする正規表現オブジェクトを生成します。
構文
var regex = new RegExp("pattern" [, "flags"]);
var literal = /pattern/flags;
引数
-
pattern - 正規表現のテキスト。
-
flags -
フラグは、次の値を任意の組み合わせで指定できます。:
-
g - グローバルなマッチ
-
i - 大文字・小文字の無視
-
m - 複数行に渡るマッチ
-
y -
先頭固定 (sticky)。対象文字列中の正規表現の
lastIndexプロパティによって示された位置からのみマッチするようになります(それより後の位置からのマッチは試みません)。このフラグは、 特殊文字 "^" が持つ開始位置でのみマッチする性質を、lastIndexプロパティの値を変更することにより文字列中の任意の位置で効果的に用いることを可能にします。
-
説明
コンストラクタ関数を使うとき、通常の文字列のエスケープルール(文字列の中に \ 付きの特別な文字列が含まれているときにはその文字をエスケープするルール)に従う必要があります。例えば、以下は等価です。:
var re = new RegExp("\\w+");
var re = /\w+/;
リテラルフォーマットでの引数はクォーテーションで囲みませんが、コンストラクタ関数での引数はクォーテーションで囲むことに注意してください。ですから、以下の表現は同じ正規表現を生成していることになります。:
/ab+c/i;
new RegExp("ab+c", "i");
正規表現における特殊文字
| 文字 | 意味 |
\ |
通常は文字通りに扱われる文字に対して、次の文字は特殊であり、文字通り解釈させないように指示します。 例えば、 あるいは、 通常は特殊文字として扱われる文字に対して、 次の文字は特殊文字ではなく、文字通りに解釈するように指示します。 例えば、* は直前の文字の 0 回以上の出現にマッチする特別な文字です。つまり、 |
^ |
入力の始まりにマッチします。複数行フラグが真に設定されている場合、改行文字の直後にもマッチします。 例えば、 |
$ |
入力の終端にマッチします。複数行フラグが真に設定されている場合、改行文字の直前にもマッチします。 例えば、 |
* |
直前の文字の 0 回以上の繰り返しにマッチします。例えば、/bo*/ は "A ghost booooed" の 'boooo' や "A bird warbled" の 'b' にはマッチしますが、"A goat grunted" のどんな文字にもマッチしません。 |
+ |
直前の文字の 1 回以上の繰り返しにマッチします。{1,} と等価です。例えば、/a+/ は "candy" の 'a' や、"caaaaaaandy" のすべての a にマッチします。 |
? |
直前の文字の 0 回か 1 回の繰り返しにマッチします。 例えば、
先読み表現でも使えますが、それについてはこの表の |
. |
(この文字は小数点です) 改行文字(\n、\r、 \u2028、あるいは、\u2029)を除いたあらゆる 1 文字にマッチします( 例えば、 |
(x) |
例えば、 |
(?:x) |
x にマッチしますが、マッチしたものを記憶しません。これはキャプチャしない括弧 (non-capturing parentheses)と呼ばれます。マッチした部分文字列は、マッチ結果の配列の要素 [1], ..., [n] と、あらかじめ定義された RegExp オブジェクトのプロパティ $1, ..., $9 からは参照することができません。 |
x(?=y) |
x に続いて y が現れる場合にのみ、x にマッチします【訳注: 肯定的前方先読み】。例えば、 /Jack(?=Sprat)/ は、 'Jack' に続いて 'Sprat' が現れる場合にのみ、'Jack' にマッチします。 /Jack(?=Sprat|Frost)/ は、'Jack' に続いて 'Sprat' か 'Frost' が現れる場合にのみ、'Jack' にマッチします。 しかし、 'Sprat' も 'Frost' もマッチした結果には含まれません。 |
x(?!y) |
|
x|y |
例えば、 |
{n} |
例えば、 |
{n,} |
例えば、 |
{n,m} |
例えば、 |
[xyz] |
文字の集合。 囲まれた文字のどんな 1 文字にもマッチします。 ハイフンを用いて文字の範囲を指定することができます。 例えば、 |
[^xyz] |
文字の集合の否定または補集合。つまり、括弧で囲まれていないどんな文字にもマッチします。 ハイフンを用いて文字の範囲を指定することができます。 例えば、 |
[\b] |
バックスペース (backspace)にマッチします( \b と混同しないでください) |
\b |
スペースなどで区切られた単語 (word boundary)にマッチします。( 例えば、 |
\B |
単語の区切りではない文字にマッチします。 例えば、 |
\cX |
例えば、 |
\d |
Basic Latin アルファベットにおける数字 (digit character)にマッチします。 注意:Firefox 2 とそれ以前では、あらゆるアルファベット中における数字にマッチします。(バグ 378738)【訳注: ここでのアルファベットの意味は、ラテン文字に限らない、表音文字の総称です。つまり、例えば、1などの全角数字にもマッチするということです。】 例えば、 |
\D |
Basic Latin アルファベットにおける数字以外の文字にマッチします。 注意:Firefox 2 とそれ以前では、全てのアルファベットにおける数字以外の文字にマッチします。(バグ 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 |
hh(2 桁の 16 進表現 (two hexadecimal digits))で表される文字にマッチします【訳注: x は hexadecimal から】。 |
\uhhhh |
hhhh( 4 桁の 16 進表現)で表される Unicode 値の文字にマッチします【訳注: u は Unicode の u から。つまり、これは Unicode エスケープシーケンスです】。 |
リテラル表記は、その表現が評価されたときに、正規表現を生成して提供します。リテラル表記を使用するのは、その正規表現が常に同じであり続けるだろうと考えられるときにしてください。例えば、もし正規表現をループで使用するためにリテラル表記を使うとき、その正規表現は繰り返し処理毎に再生成されないでしょう。
正規表現オブジェクトのコンストラクタ、例えば、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 インスタンスのプロパティを参照してください。- prototype
- 全てのオブジェクトへプロパティを追加することを許可します。
メソッド
RegExp インスタンスから継承されているメソッドについては、RegExp インスタンスのメソッドを参照してください。RegExp オブジェクトは、自分自身のメソッドを持っていませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。
RegExp インスタンス
Mozilla は 独自の JavaScript 拡張を提供しており、RegExp インスタンスをまるで文字列引数を取る関数であるかのように呼び出すことができます。 exec() を参照してください。
プロパティ
非推奨の RegExp プロパティも参照してください。
RegExp プロパティのいくつかは(Perl ライクな)長い名前と短い名前の両方を持っていることに注意してください。【訳注: それらは 1.5 以前のバージョンでの実装であり、非推奨の機能です。】どちらの名前でも常に同じ値を参照します。Perl は JavaScript の正規表現のモデルとなっているプログラミング言語です。
-
constructor - オブジェクトのプロトタイプを生成する関数を指定します。
-
global - 対象文字列で可能なマッチ全てに対して正規表現をテストするか、それとも、最初のマッチに対してのみテストするどうかのフラグ。
-
ignoreCase - 文字列でのマッチを適用する際に、大文字と小文字の違いを無視するかどうかのフラグ。
-
lastIndex - 次のマッチが始まる位置。
-
multiline - 複数行に渡って文字列を検索するかどうかのフラグ。
-
source - パターンのテキスト。
-
sticky - 検索が先頭固定 (sticky)かどうかのフラグ。
メソッド
非推奨の RegExp メソッドも参照してください。
-
exec - その文字列のパラメータでのマッチのための検索を実行します。
-
test - その文字列のパラメータでのマッチのためのテストをします。
-
toSource - 特定のオブジェクトを表すオブジェクトリテラルを返します。 この値は新しいオブジェクトを生成するために使うことができます。Object.prototype.toSource メソッドを上書きします。
-
toString - 特定のオブジェクトを表す文字列を返します。Object.prototype.toString メソッドを上書きします。
例
例: データフォーマットを変更するための正規表現の使用
以下のスクリプトは、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" フラグ付きの正規表現の使用
この例は、複数行の入力の個々の行にマッチさせるために正規表現で 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
Example: Regular expression and Unicode characters
As mentioned above, \w or \W only matches ASCII based characters; for example, 'a' to 'z', 'A' to 'Z', 0 to 9 and '_'. To match characters from other languagessuch as Cyrillic or Hebrew, use \uhhhh., where "hhhh" is the character's Unicode value in hexadecimal. This example demonstrates how one can separate out Unicode characters from a word.
var text = "Образец text на русском языке"; var regex = /[\u0400-\u04FF]+/g; var match = regex.exec(text); print(match[1]); // prints "Образец" print(regex.lastIndex); // prints "7" var match2 = regex.exec(text); print(match2[1]); // prints "на" [did not print "text"] print(regex.lastIndex); // prints "15" // and so on
Here's an external resource for getting the complete Unicode block range for different scripts: Regexp-unicode-block
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| 基本サポート | ? | (有) | ? | ? | ? |
| 機能 | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| 基本サポート | ? | (有) | ? | ? | ? |