ywork2020.com

Title

文字列の中の特定のパターンを探す

目次 (INDEX)

正規表現とは

正規表現 (Regular Expression)とは、文字列をの集合を特定の文字パターンで表現する方法です。
対象の文字列の中から正規表現によって定めた文字パターンに該当する文字を検索したり置換する為に使用されます。

目次に戻る

基本的な表記法

ここでは、正規表現を表すオブジェクトを生成する例から、正規表現の表記法を示します。

下記の /pattern/flag の部分が正規表現の記法です。

サンプルコード: script
<script>
	let objRegExp = new RegExp(/pattern/##flag);
</script>

目次に戻る

文字列パターンを表すための特殊文字

ここでは、正規表現のパターンを生成するための特殊文字について表形式で掲載しています。 正規表現は、以下に示す文字をつかってパターンを生成します。

. ^ $ [ ] * + ? | ( )

基本的な正規表現
文字とパターン説明
.任意の1文字にマッチします。
aaという文字にマッチします。
a+aの文字が 1回以上 繰り返す場合にマッチします。
(最長マッチング)
a+?aの文字が 1回以上 繰り返す場合にマッチします。
(最短マッチング)
a*aの文字が 0回以上 繰り返す場合にマッチします。
(最長マッチング)
a*?aの文字が 0回以上 繰り返す場合にマッチします。
(最短マッチング)
a?aの文字が 0個か1個 の場合にマッチします。
(最長マッチング)
a??aの文字が 0個か1個 の場合にマッチします。
(最短マッチング)
abc|xyzabc 又は 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)ba の次に b がある場合に b にマッチします。
(?<!a)ba の次に b がない場合に b にマッチします。
(?:a)a という文字にマッチします。
(注意: $1...$n の参照から除外される)

目次に戻る



※ バックスラッシュは Windowsのブラウザでは円マーク ( \ ) で表示されます。
定義済みの正規表現
定義パターン説明
\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]バックスペースにマッチします。
\0null にマッチします。
\cXCtrl-X
(X には A-Z の何れかの文字が入ります。)
\f改ページ
(FF:Form-feed)

目次に戻る



※ バックスラッシュは Windowsのブラウザでは円マーク ( \ ) で表示されます。
特定の位置関係の正規表現
位置パターン説明
^aa で始まる文字列にマッチします。
a$a で終わる文字列にマッチします。
\<単語の先頭にマッチします。
\>単語の末尾にマッチします。
\b単語の先頭か末尾にマッチします。
(区切り文字)
\B単語の先頭か末尾以外にマッチします。
(区切り文字以外)
\Aファイルの先頭にマッチします。
\zファイルの末尾にマッチします。
\G直前の一致文字列の末尾にマッチします。

目次に戻る



※ バックスラッシュは Windowsのブラウザでは円マーク ( \ ) で表示されます。
置換文字列で使える正規表現
置き換え文字説明
\0一致した文字列全体に置換します。
\1 ~ \9一致した文字列の1~9番目に対応する文字列に置換します。
\l次の1文字を小文字に変換します。
\L...\E挟まれた文字列を小文字に変換します。
\u次の1文字を大文字に変換します。
\U...\E挟まれた文字列を大文字に変換します。

目次に戻る



※ バックスラッシュは Windowsのブラウザでは円マーク ( \ ) で表示されます。
バックスラッシュ (その他の正規表現)
文字説明
\nn番目の (...) にマッチした文字列
\ohhh8進数で hhh の文字。(非推奨)
\xhh16進数で hh の文字
\uhhhhUTF-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 ( /  /  )


以下に幾つかの正規表現をサンプルとして掲載しておきます。 正規表現サンプルをクリックすることで、結果に反映することができます。

  • /[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 「すべての非空白文字」

目次に戻る