#概要
正規表現が苦手なので、JavaScriptの正規表現を自分用のメモとしてまとめました。
#正規表現とは?
正規表現とは、文字を表現するための表現方法のことです。検索する際によく使われます。正規表現は、「リテラル」と「メタ文字」の2種類で構成されます。
- リテラル:見たままの文字のこと
- メタ文字:特殊な意味を持つ文字のこと
#デリミタ
デリミタとは、表現の始まりと終わりを示すものです。JavaScriptでは、「/」で表現します。また、終わりを表すデリミタの直後に配置し、デリミタ内部に機能を追加するものを修飾子といいます。
主な修飾子
修飾子 | 何の略? | 機能 |
---|---|---|
g | global | 合致する結果すべてを抽出する |
i | case insensitive | 大文字と小文字を区別しない |
m | multiline | 複数行を対象にする(^と$) |
#メタ文字
##基本
メタ文字とは、特殊な意味を持つ文字のことです。
文字 | 表現内容 |
---|---|
. | 改行を除く任意の1文字 |
※エスケープ
メタ文字は特別な意味を持つため、そのまま記述すると意味のある指定と解釈されます。 リテラルとして認識させたい場合は、直前に「\」バックスラッシュを付ける必要があります。
例).をエスケープする
\.
##文字クラス
[]に文字を列挙することを文字クラスといいます。[]内に記述した文字のいずれか1文字を表現します。
// a、b、cのいずれか1文字を表現する
[abc]
###範囲の指定
文字クラス内では、「-」を使って範囲を指定することができます。文字コードの順番で指定します。
// a、b、cのいずれか1文字を表現する
[a-c]
###文字クラス内での否定
[ の直後に ^ を記述すると、[]内の文字以外の1文字を表現します。
※[ の直後でない場合は、 ^ のリテラルとして扱われます。
// a、b、c以外の1文字を表現する
[^a-c]
###文字クラス内でのエスケープ
文字クラス内では、エスケープが必要なメタ文字は異なります。「.」などはエスケープの必要がありません。
【文字クラス内でエスケープが必要なメタ文字】
メタ文字 | 条件 |
---|---|
^ | [ の直後のみ |
- | 文字と文字の間にある場合 |
] | |
\ |
###定義済みの文字クラス
比較的よく使われる文字クラスには、略記が定義されています。
略記 | 文字クラス | 表現内容 | 備考 |
---|---|---|---|
\d | [0-9] | 0-9のいずれか1文字 | digitの略 |
\D | [^0-9] | 0-9以外の1文字 | \dの否定形 |
\w | [a-zA-Z0-9_] | a-z、A-Z、0-9、_のいずれか1文字 | wordの略 |
\W | [^a-zA-Z0-9_] | a-z、A-Z、0-9、_以外の1文字 | \wの否定形 |
\s | [\n\t\r\f ] | 改行、タブ、リターン、改ページ、スペースのいずれか1文字 | spaceの略 |
\S | [^\n\t\r\f ] | 改行、タブ、リターン、改ページ、スペース以外の1文字 | \sの否定形 |
\n | 改行 | ||
\t | タブ | ||
\r | リターン | ||
\f | 改ページ |
##論理和指定子
aとbのいずれかという指定をすることができます。
// aまたはbの1文字を表現する
a|b
##グループ化
()で囲むことで正規表現をグループ化することができます。
// abcまたはabdのいずれかを表現する
ab(c|d)
##量指定子
直前の文字直前部分の正規表現を何個繰り返すかを表現します。
量指定子 | 表現内容 |
---|---|
* | 0個以上 |
+ | 1個以上 |
? | 0個または1個 |
{n} | n個 |
{min,} | min個以上 |
{min, max} | min個以上、max個以下 |
※最長一致と最短一致
量指定子はデフォルトで、条件を満たすものが複数あった場合、一番ながいものと一致するようになっています。これを最長一致といいます。
最短一致(一番短いものと一致するよう)にするには、量指定子の直後に「?」をつけます。
##アンカー
位置を表現します。
アンカー | 表現内容 |
---|---|
^ | 行の先頭 |
$ | 行の末尾 |
\b | 単語の境界 |
\B | 単語の境界以外 |
#正規表現の一覧
http://gimite.net/help/devas-ja/all_regex.html
#参考
https://murashun.jp/blog/20190215-01.html
https://so-zou.jp/software/tech/programming/tech/regular-expression/meta-character/
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
https://ja.javascript.info/regular-expressions