正規表現は、文字列または特殊文字を一致させるために使用される論理式です. いわゆる論理式は、いくつかの特定の文字で構成され、文字列データを表現できる特定のルールの特別な文字列を表すために使用されます. フィルタロジック.
JavaScript では、正規表現を使用するには RegExp オブジェクトを使用する必要があります。RegExp オブジェクトを作成するには、次の 2 つの方法があります。
var patt = new RegExp(パターン, 修飾子);
var patt = /pattern/modifier; //パターン/修飾子
パラメータは次のように説明されます。
- pattern(パターン): 正規表現、正規表現の文法に従って定義された正規表現。
- modifier(修飾子): 文字列のマッチング モードを設定するために使用される修飾子。オプションの値を次の表に示します。
修飾子 | 説明 |
---|---|
i | 大文字と小文字を区別しない照合を実行する |
g | グローバル一致を実行します (最初の一致で停止するのではなく、すべての一致を検索します) |
m | 複数行の一致を実行する |
s | 改行と一致させるために. を使用できるようにします |
u | Unicode コードのパターンと照合します。 |
y | 「スティッキー」検索を実行し、ターゲット文字列の現在位置からマッチングを開始します。 |
注: new キーワードを使用して RegExp オブジェクトを作成する場合は、正規表現の特殊文字をエスケープする必要があります。つまり、 \\w+
などの特殊文字の前にバックスラッシュ\
を追加します。
正規表現を定義する
正規表現は、文字、数字、句読点、および/abc/
、 /(\d+)\.\d*/
などの一部の特殊文字で構成されます。正規表現で使用できる特殊文字を次の表に示します。
特殊文字 | 意味 |
---|---|
\ | エスケープ文字。非特殊文字の前にバックスラッシュを使用して、次の文字が特殊文字であり、文字どおりに理解できないことを示します。たとえば\b 文字境界を示します。特殊文字の前にバックスラッシュを使用して、次の文字が特殊文字であることを示します。文字は特殊文字ではないため、文字通りに理解する必要があります。たとえば、バックスラッシュ自体、正規表現でバックスラッシュを定義する場合は、バックスラッシュの前に別のバックスラッシュ\\ を追加する必要があります。 |
^ | 文字列の先頭、または m 修飾子が設定されている場合は改行の直後と一致します。たとえば、「/^A/」は、「an A」の「A」には一致しませんが、「An E」の「A」には一致します。 |
$ | 文字列の末尾、または修飾子 m が設定されている場合は改行の前の位置と一致します。たとえば、「/t$/」は「eater」の「t」には一致しませんが、「eat」の「t」には一致します。 |
* | 前の式と 0 回以上一致します ({0,} と同等)。たとえば、「/bo*/」は、「幽霊がブーイングした」の「ブー」と「鳥がさえずった」の「b」に一致しますが、「ヤギがうなり声を上げた」の場合は何も一致しません。 |
+ | 前の式と 1 回以上一致します ({1,} と同等)。たとえば、「/a+/」は「candy」の「a」と「caaaaaandy」のすべての「a」に一致しますが、「cndy」では何も一致しません。 |
? | 前の式と 0 回または 1 回一致します。これは {0,1} に相当します。たとえば、「/e?le?/」は、「angel」の「el」、「angle」の「le」、「oslo」の「l」に一致します。 |
. | 改行を除く任意の 1 文字と一致します。たとえば、「/.n/」は、「いいえ、リンゴが木の上にあります」の「an」と「on」に一致します。 |
(x) | 「x」と一致し、この一致を記憶します。ここでの括弧はキャプチャ括弧と呼ばれます。 |
(?:x) | 「x」と一致しますが、一致を覚えていません。ここで括弧は非キャプチャ括弧と呼ばれます。 |
x(?=y) | 「x」の後に「y」が続く場合、「x」と一致します。たとえば、「/Jack(?=Sprat)/」は「Jack」の後に「Sprat」が続くものと一致し、「/Jack(?=Sprat|Frost)/」は「Jack」の後に「Sprat」または「Frost」が続くものと一致します。 。注: 「Sprat」も「Frost」も一致結果には含まれませんでした。 |
(?<=y)x | 「x」の前に「y」がある場合は、その中の「x」と一致します。たとえば、「/(?<=Jack)Sprat/」は「Sprat」を先頭に付けずに「Jack」と一致し、「/(?<=Jack|Tom)Sprat/」は「Jack」または「Tom」と一致します。その前に。スプラット」。注: 「Jack」も「Tom」も一致結果には含まれません。 |
x(?!y) | 「x」の後に「y」が続かない場合は、「x」と一致します。たとえば、「/\d+(?!\.)/」は、「3.141」ではなく、「3.141」の「141」と一致します。 |
(?<!y)x | 「x」の前に「y」がない場合は、「x」と一致します。 |
x|y | 「x」または「y」と一致します。たとえば、「/green|red/」は、「green apple」の「green」と「red apple」の「red」に一致します。 |
{n} | n は、前の文字と n 回一致する正の整数です。たとえば、「/a{2}/」は「candy」の「a」とは一致しませんが、「caandy」のすべての「a」と「caaandy」の最初の 2 つの「a」には一致します。 |
{n,} | n は、前の文字と少なくとも n 回一致する正の整数です。たとえば、「/a{2,}/」は「aa」、「aaaa」、「aaaaa」には一致しますが、「a」には一致しません。 |
{n,m} | n と m は両方とも整数で、前の文字に少なくとも n 回、最大 m 回一致することを意味します. n または m が 0 の場合、この値を無視することを意味します.たとえば、「/a{1, 3}/」は、「candy」の「a」、「caandy」の最初の 2 つの「a」、「caaaaaaandy」の最初の 3 つの「a」に一致します。 |
[xyz] | エスケープ シーケンス、x、y、または z に一致します。また- ダッシュを使用して文字の範囲を指定することもできます。たとえば、「[abcd]」と「[ad]」は同じであり、どちらも「brisket」の「b」と「city」の「c」に一致します。 |
[^xyz] | 文字セットを反転し、x、y、z を除く任意の文字に一致します。ダッシュ- 使用して文字の範囲を指定することもできます。たとえば、「[^abc]」は「[^ac]」と同じで、どちらも「brisket」の「r」と「chop」の「h」に一致します。 |
[\b] | バックスペースと一致します。注意: \b と混同しないでください。 |
\b | 単語の境界、つまり単語の先頭または末尾と一致します。たとえば、「/\bm/」は「moon」の「m」と一致しますが、「imoon」の「m」とは一致しません。 |
\B | 単語以外の境界と一致します。たとえば、「er\B」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。 |
\cX | X が A から Z までの文字の場合、文字列内の制御文字と一致します。たとえば、「/\cM/」は文字列内の「control-M(U+000D)」と一致します。 |
\d | 「[0-9]」に相当する数字と一致します。たとえば、「/\d/」または「/[0-9]/」は、「B2 はスイート番号です」の「2」と一致します。 |
\D | 「[^0-9]」と同等の数字以外の文字と一致します。たとえば、「/\D/」または「/[^0-9]/」は、「B2 はスイート番号です」の「B」と一致します。 |
\f | フォーム フィード文字 (U+000C) と一致します。 |
\n | 改行文字 (U+000A) と一致します。 |
\r | 復帰 (U+000D) と一致します。 |
\s | “[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\ u202f\u205f\ u3000\ufeff]」。たとえば、「/\s\w*/」は「foo bar」の「bar」と一致します。 |
\S | “[^\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]” と同等の非空白文字と一致します。たとえば、「/\S\w*/」は「foo bar」の「foo」と一致します。 |
\t | 水平タブ文字 (U+0009) と一致します。 |
\v | 垂直タブ文字 (U+000B) と一致します。 |
\w | 「[A-Za-z0-9_]」に相当する単一の文字 (文字、数字、またはアンダースコア) と一致します。たとえば、「/\w/」は、「apple」の「a」、「$5.28」の「5」、「3D」の「3」に一致します。 |
\W | 「[^A-Za-z0-9_]」に相当する非単語文字と一致します。たとえば、「/\W/」または「/[^A-Za-z0-9_]/」は、「50%.」の「%」と一致します。 |
\n | 最後に n 番目に一致した値を取得します。たとえば、「/apple(,)\sorange\1/」は、「apple、orange、cherry、peach」の「apple、orange」と一致します。 |
\0 | \0<数字> は 8 進数のエスケープ シーケンスであるため、NULL (U+0000) 文字と一致します。その後に他の小数は続きません。 |
\xhh | 2 桁の 16 進数 (\x00 ~ \xFF) で表される文字と一致します。 |
\uhhhh | 4 桁の 16 進数で表される UTF-16 コード単位と一致します。 |
\u{hhhh} または \u{hhhhh} | (u 修飾子が設定されている場合のみ) 16 進表現で表された Unicode 文字と一致します。 |
ヒント: 正規表現では.
. 、 *
、 ?
、 +
、 [
、 ]
、 (
、 )
、 {
、 }
、 ^
、 $
、 |
、 \
およびその他の文字には特別な意味が与えられています. これらの文字の本来の意味を使用する場合、これらの文字をエスケープするにはバックスラッシュを追加する必要があります。たとえば、 .
と一致させたい場合は、 \.
として記述する必要があります。
正規表現を使用する
JavaScript RegExp オブジェクトは、次の表に示すように、正規表現を実行するための一連のメソッドを提供します。
方法 | 説明 |
---|---|
compile() | バージョン 1.5 で非推奨となり、正規表現をコンパイルします |
exec() | 文字列内で一致するものを検索し、配列を返すか、一致するものがない場合は null を返します。 |
test() | 文字列が正規表現に一致するかどうかをテストし、一致する場合は true を返し、一致しない場合は false を返します。 |
toString() | 指定されたオブジェクトを表す文字列を返します。 |
さらに、次の表に示すように、 String オブジェクトには正規表現を実行するためのメソッドもいくつか用意されています。
方法 | 説明 |
---|---|
search() | 文字列内で一致を検索し、最初に一致した結果を返します。一致が見つからない場合は -1 を返します。 |
match() | 文字列内で一致するものを検索し、配列を返すか、一致するものがない場合は null を返します。 |
matchAll() | 文字列内のすべての一致を検索し、イテレータを返します。 |
replace() | 正規表現に一致する文字列の部分を置換します |
split() | 正規表現に従って文字列を文字列の配列に分割します。 |
メソッドに加えて、次のようないくつかのプロパティも RegExp オブジェクトで提供されます。
属性 | 説明 |
---|---|
constructor | RegExp オブジェクトを作成するためのプロトタイプである関数を返します。 |
global | 修飾子「g」が設定されているかどうかを確認します |
ignoreCase | 修飾子「i」が設定されているかどうかを確認します |
lastIndex | 次の一致の開始位置を指定するために使用されます |
multiline | 修飾子「m」が設定されているかどうかを確認します |
source | 正規表現の一致パターンを返します。 |
サンプルコードは次のとおりです。
変数strに"Hello World!"を代入します。
変数regに/[a-g]/gを代入します。
document.write(reg.exec(str) + "<br>"); // 出力:e
document.write(reg.test(str) + "<br>"); // 出力:true
document.write(reg.toString() + "<br>"); // 出力:/[a-g]/g
document.write(str.search(reg) + "<br>"); // 出力:1
document.write(str.match(reg) + "<br>"); // 出力:e,d
document.write(str.matchAll(reg) + "<br>"); // 出力:[object RegExp String Iterator]
document.write(str.replace(reg, "+") + "<br>"); // 出力:H+llo Worl+!
document.write(str.split(reg) + "<br>"); // 出力:H,llo Worl,!