正規表現とは
正規表現 (Regular Expression)とは、文字列をの集合を特定の文字パターンで表現する方法です。
対象の文字列の中から正規表現によって定めた文字パターンに該当する文字を検索したり置換する為に使用されます。
基本的な表記法
ここでは、正規表現を表すオブジェクトを生成する例から、正規表現の表記法を示します。
下記の /pattern/flag の部分が正規表現の記法です。
サンプルコード: script
<script>
let objRegExp = new RegExp(/pattern/##flag);
</script>
文字列パターンを表すための特殊文字
ここでは、正規表現のパターンを生成するための特殊文字について表形式で掲載しています。 正規表現は、以下に示す文字をつかってパターンを生成します。
. ^ $ [ ] * + ? | ( )
文字とパターン | 説明 |
---|---|
. | 任意の1文字にマッチします。 |
a | aという文字にマッチします。 |
a+ | aの文字が 1回以上 繰り返す場合にマッチします。 (最長マッチング) |
a+? | aの文字が 1回以上 繰り返す場合にマッチします。 (最短マッチング) |
a* | aの文字が 0回以上 繰り返す場合にマッチします。 (最長マッチング) |
a*? | aの文字が 0回以上 繰り返す場合にマッチします。 (最短マッチング) |
a? | aの文字が 0個か1個 の場合にマッチします。 (最長マッチング) |
a?? | aの文字が 0個か1個 の場合にマッチします。 (最短マッチング) |
abc|xyz | abc 又は xyz にマッチします。 (OR条件) いずれかの条件として使われます。) |
a(s|nd) | ()は文字をグループとして扱います。 この場合 as 又は and にマッチします。 |
a{n} | aの文字が n個 並んでいる場合にマッチします。 |
a{n,} | aの文字が n個以上 並んでいる場合にマッチします。 (最長マッチング) |
a{n,}? | aの文字が n個以上 並んでいる場合にマッチします。 (最短マッチング) |
a{n,m} | aの文字が n個以上、m個以下 の場合にマッチします。 (最長マッチング) |
a{n,m}? | aの文字が n個以上、m個以下 の場合にマッチします。 (最短マッチング) |
[abc] | a , b , c の何れかの文字にマッチします。 |
[^abc] | a , b, c 以外の文字にマッチします。 |
[a-c] | a から c までの何れかの1文字にマッチします。 つまり a , b , c の何れかの1文字にマッチします。 |
a(?=b) | a の次に b がある場合に a にマッチします。 |
a(?!b) | a の次に b がない場合に a にマッチします。 |
(?<=a)b | a の次に b がある場合に b にマッチします。 |
(?<!a)b | a の次に b がない場合に b にマッチします。 |
(?:a) | a という文字にマッチします。 (注意: $1...$n の参照から除外される) |
定義パターン | 説明 |
---|---|
\t | 水平タブ にマッチします。 (HT:Horozontal tab) |
\r | 復帰文字 にマッチします。 (CR:Carriage return) |
\n | 改行文字 にマッチします。 (LF:Line feed) |
\d | 全ての半角数字にマッチします。 ([0-9]と同じ) |
\D | \d 以外の文字にマッチします。 ([^0-9]と同じ) |
\s | 垂直タブ以外の1つの区切り文字にマッチします。 空白文字( ), 改ページ(\f), 改行(\n), ラインフィード(\r), タブ文字(\r) などです。 |
\S | \s 以外の文字にマッチします。 (非空白文字) |
\w | 半角英数文字とアンダーバーにマッチします。 ([A-Za-z0-9_]と同じ) |
\W | \w 以外の文字 ([^A-Za-z0-9_]と同じ) |
\v | 垂直タブにマッチします。 (VT:Vertical tab) |
[\b] | バックスペースにマッチします。 |
\0 | null にマッチします。 |
\cX | Ctrl-X (X には A-Z の何れかの文字が入ります。) |
\f | 改ページ (FF:Form-feed) |
位置パターン | 説明 |
---|---|
^a | a で始まる文字列にマッチします。 |
a$ | a で終わる文字列にマッチします。 |
\< | 単語の先頭にマッチします。 |
\> | 単語の末尾にマッチします。 |
\b | 単語の先頭か末尾にマッチします。 (区切り文字) |
\B | 単語の先頭か末尾以外にマッチします。 (区切り文字以外) |
\A | ファイルの先頭にマッチします。 |
\z | ファイルの末尾にマッチします。 |
\G | 直前の一致文字列の末尾にマッチします。 |
置き換え文字 | 説明 |
---|---|
\0 | 一致した文字列全体に置換します。 |
\1 ~ \9 | 一致した文字列の1~9番目に対応する文字列に置換します。 |
\l | 次の1文字を小文字に変換します。 |
\L...\E | 挟まれた文字列を小文字に変換します。 |
\u | 次の1文字を大文字に変換します。 |
\U...\E | 挟まれた文字列を大文字に変換します。 |
文字 | 説明 |
---|---|
\n | n番目の (...) にマッチした文字列 |
\ohhh | 8進数で hhh の文字。(非推奨) |
\xhh | 16進数で hh の文字 |
\uhhhh | UTF-16 Unicode文字 |
\u{hhhh} | g フラグ指定時のみ利用可能。非サロゲートペア領域の UTF-16 Unicode文字 |
\u{hhhhh} | g フラグ指定時のみ利用可能。サロゲートペア領域の UTF-16 Unicode文字 |
\p{property} | Unicodeで、Binaryプロパティに propety を持つ文字 (uフラグ) |
\p{gc=property} | Unicodeで、General_Category に propety を持つ文字 (uフラグ) |
\p{sc=property} | Unicodeで、Script が propety にマッチする文字。(uフラグ) |
\p{scx=property} | Unicodeで、Script_Extensions が propety にマッチする文字 (uフラグ) |
\P{property} | Unicodeで、Binaryプロパティに propety を持たない文字 (uフラグ) |
\P{gc=property} | Unicodeで、General_Category に propety を持たない文字。(uフラグ) |
\P{sc=property} | Unicodeで、Script が propety にマッチしない文字。(uフラグ) |
\P{scx=property} | Unicodeで、Script_Extensions が propety にマッチしない文字。(uフラグ) |
フラグ指定する文字
フラグ (flag) は検索の仕方を指定するための文字です。この文字を組み合わせてフラグを設定します。 例えば、検索対象の文字列全体を検索し、かつ大文字・小文字を区別しないという設定する場合には、 gi と指定します。
g , i , m , s , u , y
フラグ | 説明 |
---|---|
g ( global ) | 繰り返し、2番目、3番目... にマッチする部分も検索する |
i ( ignoreCase ) | 大文字・小文字を区別しない |
m ( multiline ) | 複数行に対して検索する |
u ( unicode ) | Unicodeのサロゲーションペア文字も1文字として扱う |
y ( sticky ) | lastIndex で指定した位置からのみ検索する |
s ( dotAll ) | ピリオド(.)が CR, LF, U+2028, U+2029 を含め、すべての文字にマッチする |
ツールで実際に正規表現を使ってみる
ここでは、実際に正規表現が、文字列にマッチしているかを実験することができます。 このサンプルは自由に設定することができます。
:
自由に編集していただけます。編集すると結果欄のテキストが変更されます。
自由に編集していただけます。編集すると結果欄のテキストが変更されます。
↓
&
RegExp ( / / )
RegExp ( / / )
↓
↓
以下に幾つかの正規表現をサンプルとして掲載しておきます。 正規表現サンプルをクリックすることで、結果に反映することができます。
- /[h-m]/g 「hからmまでの文字 (hijklm)」
- /[^,.]/g 「カンマとピリオド以外の文字」
- /web.*s/i 「最初にマッチする web から始まり s で終わる文字列」
- /web.*s/gi 「1ライン毎で、web から始まり 最後のs で終わる全ての文字列」
- /web.*s/is 「web から始まり 最後のs で終わる文字列」
- /^T.*/g 「T から始まる 行の文字列」
- /\W/g 「アルファベット、アンダーバー、数字以外の文字」
- /\S/g 「すべての非空白文字」