JavaScript「正規表現」

JavaScript

正規表現とは目的の文字列内で文字をパターンで参照して照合します

JavaScriptの正規表現オブジェクト

JavaScriptの正規表現はオブジェクトでもあり以下のものがあります

以下のtextとregexexを使ってサンプルを記述します

const text = "aaa,bbb,ccc,ddd";
const regexex = /a/g;

RegExp.exec() 

文字列内を検索し結果は配列を、無ければNullを返します
正規表現.exec(‘文字列’);

const ec = regexex.exec(text);
console.log(ec); //(1) ['a', index: 0, input: 'aaa,bbb,ccc,ddd', groups: undefined]

RegExp.test()

文字列内を検索し結果はtrue または false で返します
正規表現.test(‘文字列’);

const te = regexex.test(text);
console.log(te);// true

String.match()

文字列の正規表現に一致する部分を検索します
文字列.match(正規表現);

const mt = text.match(regexex);
console.log(mt); // (3) ['a', 'a', 'a']

String.matchAll()

正規表現に一致するすべての文字列をキャプチャグループを含めてイテレーターで返します
文字列.matchAll(正規表現);

const ma = [...text.matchAll(regexex)];
console.log( ...ma);
// (1) ['a', index: 0, input: 'aaa,bbb,ccc,ddd', groups: undefined] 
(1) ['a', index: 1, input: 'aaa,bbb,ccc,ddd', groups: undefined] 
(1) ['a', index: 2, input: 'aaa,bbb,ccc,ddd', groups: undefined]

String.replace()

文字列内の一部の文字列を指定した文字で置き換えます
置換文字列は正規表現で指定できます
文字列.replace(置換文字列, 置換後文字列)

const rp = text.replace(/a/,"x");
console.log(rp);// xaa,bbb,ccc,ddd

String.replaceAll()

文字列内の文字列を指定した文字で全て置き換えます
置換文字列が正規表現の場合はグローバルフラグ(g)が必要です
文字列.replaceAll(置換文字列, 置換後文字列)

const rpa = text.replaceAll(/a/g,"x");
console.log(rpa);// xxx,bbb,ccc,ddd

String.search()

正規表現が一致するかどう確認します
文字列.search(正規表現);

const sh = text.search(/c/);
console.log(sh); // 8

String.split()

文字列を区切り文字で分割して配列にします
文字列.split(区切り文字);

const sp = text.split(/,/);
console.log(sp); // (4) ['aaa', 'bbb', 'ccc', 'ddd']

正規表現の指定の方法

正規表現リテラルを使用する
const reg = /abc/;

/と/の間に直接文字、数字等を記述します

RegExpのコンストラクタ関数を呼び出す
const reg = new RegExp(‘abc’,’g’);

コンストラクタは主に動的処理の際に使用します 引数はリテラルでも正規表現でもいいですが少しルールがあります 第一引数で文字列を第二引数でフラグを指定します

正規表現のパターン

正規表現は文字のみと特殊文字を含めた文字列で指定します

以下は主なパターンです

パターン説名                                    
[abc]aまたはbまたはcに一致します
[a-c] 上記はその範囲を-で表すことができます([abc]と同等です)
[^abc] aまたはbまたはc 以外に一致します
[^a-c] -で範囲指定します([^abc]と同等です)
. (ドット)指定したドットの位置には改行文字を除くあらゆる文字が一致します
\d 数字に一致します
\D 数字以外に一致します
\w 半角英数字アンダースコアに一致します
\W アルファベット以外に一致します
\s  空白に一致します
\S 空白以外に一致します
| (パイプ) 左辺または右辺に一致します
^ (キャレット):先頭一致、先頭からの文字列に一致します
/^A/の場合は先頭文字がAの文字に一致します
また、複数行の場合は改行文字の直後の文字列も対象となります
その場合は、gmのフラグが必要です
$ (ドル記号):末尾一致
末尾の文字列に一致します
/A$/ の場合は末尾がAの文字に一致します
また、複数行の場合は改行文字の直前の文字列も対象となります
その場合は、gmのフラグが必要です
(アスタリスク):直前の文字を0 回以上
直前の文字を含む場合も含まない場合も一致します
例えば/A*/ の場合はAの文字列であってもなくても一致します
(プラス記号):直前の文字を1 回以上 直前の文字を含んだ場合に一致します
例えば/A+/の場合はAの文字を含む場合だけ一致します
? (クエスチョンマーク):直前の文字を0 回または 1 回
直前の文字を含む場合も含まない場合も一致します
{n} 直前の文字がn回出現するものに一致
例えば/A{2}/ の場合文字列内の2以上のAに一致します
{n,} 直前の文字がn回出現するものに一致あともすべてを調べます
例えば/A{2,}/の場合文字列内の2つ以上のAに一致しそれ以降も一致を調べます
{n,m} 直前の文字がn回出現するものに一致しさらに最大数m回
を指定して文字数の上限を指定します
※n<m の関係になります

正規表現にはオプションフラグがあります
主なフラグは以下の通りです

g グローバルフラグ。文字列全体を繰り返し検索する
i 大文字小文字を区別せずにマッチさせる
m 複数行の文字列を検索対象とする
u Unicodeを対象とします

パターンとフラグは以下のように指定します

/パターン/フラグ   

コメント