String オブジェクトのreplace メソッドを使用して文字列の置換を行う場合、置換対象を指定する様々な方法があります。
今回は、メタ文字を使用したパターンで置換対象を指定する方法を紹介します。
なお、未経験からITエンジニアへの就職に興味がある方や未経験からプログラミングを効率よく学びたいと考えている方は、就職率98.3%で受講料無料のプログラミングスクールプログラマカレッジもおすすめです。
正規表現では「+」は「加える」という意味ではなく、「1回以上の連続文字」を意味します。
このように、プログラムで、本来の意味とは異なる特別な意味を持たせた文字を、メタ文字といいます。
そして、正規表現を使う場合は、メタ文字を使って、文字のパターンを表します。
例えば、次のようなメタ文字があります。
メタ文字 | 意味 |
---|---|
. | 任意の1文字 |
*? | 直前の文字が0文字以上続くもので、当てはまる中で最短のもの |
このメタ文字でパターンを作り、次のように文字の置換を行います。
let str = "'1234','あいう','ab','',字";
let str2 = str.replace(/'.*?'/g, "A");
正規表現の後ろに記述する「 g 」は グローバルサーチという正規表現フラグで、指定した正規表現リテラルのパターンにマッチする全ての文字列を返します。
(正規表現の記述については、正規表現をご参照下さい。)
変数str2を出力すると、次のように表示されます。
メタ文字を使用して作った「 /’.*?’/g 」のパターンは、シングルコーテーションで囲まれた部分(空文字も含む)を意味しています。
「*?」で「 直前の文字が0文字以上続くもので、当てはまる中で最短のもの 」を表しますが、「*」のみの場合は、「 直前の文字が0文字以上続くもので、当てはまる中で最長のもの 」を表すので、「 let str3 = str.replace(/’.*’/g, “A”); 」として置換して、変数str3を出力すると、次のように表示されます。
「*」のみの場合は、「’1234′,’あいう’,’ab’,”」の一番外側のシングルコーテーションで囲まれている「1234′,’あいう’,’ab’,’」が、パターンが一致した置換対象とみなされます。
置換対象として、メタ文字自体を本来の意味で指定する場合、メタ文字の前に「 \(バックスラッシュ)」を付けて「 \* 」のように記述します。
「 \* 」は、「メタ文字ではない * 」を意味します。
この「 \ 」のように、特別な意味を無効にする文字を、エスケープ文字といいます。
メタ文字には、次のような種類があります。
. | 任意の1文字
例)A.B → Aから始まってBで終わる 文字数が3の文字列 |
---|---|
* | 直前のパターンの0回以上繰り返し(最長一致)
例1)ABC*?→ AB、ABC、ABCCC など |
+ | 直前のパターンの1回以上繰り返し(最長一致)
例1)ABC+?→ ABC、ABCCC など |
? | 直前のパターンの0?1回繰り返し(最長一致)
例)ABC??→ AB、ABC |
?|? | |の左右の文字列のいずれか(?または?) |
[?] | ?のいずれか1文字
例1)[ABC]?→ A、B、C のいずれか |
[^?] | ?に含まれない1文字
例1)[^ABC]?→ A、B、C 以外の1文字 |
^ | 論理行頭
例1)^○ →?行頭の○ |
$ | 論理行末
例1)。$?→?行末の。 |
\ | 直後のメタ文字をエスケープ (直後の文字を正規表現の記号(メタ文字)として扱わない) 例)\\ → 文字の「\」 |
\n | 改行文字 ※CR+LF(制御コード 0x0d+0x0a)とLF(制御コード 0x0a) 例1)\n?→?改行 |
\t | タブ文字(制御コード 0x09)
例1)\t?→?タブコード |
\s | 空白文字(半角スペース、\t、\n、\r、\f)すべて
例)\s?→?空白文字 |
\S | 空白文字(半角スペース、\t、\n、\r、\f)以外すべて |
\x## | 16進数 ※#は0?9、a?f、A?Fのいずれか 例1)\x41 → A |
\b | 語の区切り位置
例)\bam\b?→?amという単語 |
\B | 語の区切り位置以外
例)\Bam\B?→?単語の途中にあるam |
\d | すべての半角数字
例1)\d?→?半角数字 |
\D | 半角数字以外すべて
例)\D?→?半角数字以外 |
\w | すべての半角英数字とアンダースコア
例1)[\w.\-]+@[\w\-]+\.[\w.\-]+?→?メールアドレス |
\W | 半角英数字とアンダースコア以外すべて |
\l | 半角英小文字すべて
例1)\l?→?半角英小文字 |
\L | 半角英小文字以外すべて(英大文字、数字、全角文字などすべて)
例)\L?→?半角英小文字以外 |
\u | 半角英大文字すべて
例1)\u?→?半角英大文字 |
\U | 半角英大文字以外すべて(英小文字、数字、全角文字などすべて)
例)\U?→?半角英大文字以外 |
\a | アラーム(制御コード 0x07) |
\c# | 対応するコントロール文字 ※#はA-Zの半角英字のみ指定可 例)\cV → Ctrl-V |
\e | エスケープ(制御コード 0x1b) |
\f | 改ページ(制御コード 0x0c) |
\r | リターン(制御コード 0x0d) ※CR+LFのCR部分にはマッチしない |
\v | 垂直タブ(制御コード 0x0b) |
\Q?\E | ?部分に含まれるメタ文字をメタ文字として解釈しない (「\」でエスケープしなくてよい) 例)\QC:\Program Files\MIW10\E?→ C:\Program Files\MIW10 |
(?i) | 以降の英字の大文字と小文字を同一視する |
(?-i) | 以降の英字の大文字と小文字を区別する
例1)(?-i)abcd → 小文字の abcd のみ |
(?) | ・パターンのグループ ・置換文字列に引用する部分の指定 例1)(AB)+?→ AB、ABABAB など |
(?:?) | パターンのグループ
例)A(?:AB|CD)?→ AAB、ACD |
*? | 直前のパターンの0回以上繰り返し(最短一致)
例1)ABC*??→ AB |
+? | 直前のパターンの1回以上繰り返し(最短一致)
例1)ABC+??→ ABC |
?? | 直前のパターンの0?1回繰り返し(最短一致)
例)ABC???→ AB |
{min,max} | 直前のパターンのmin回からmax回繰り返し(最長一致)
例1)ABC{3,5}?→ ABCCC、ABCCCC、ABCCCCC |
{min,} | 直前のパターンのmin回以上繰り返し(最長一致)
例1)ABC{3,}?→ ABCCC、ABCCCC、ABCCCCC など |
{num} | 直前のパターンのnum回繰り返し
例1)ABC{3}?→ ABCCC |
{min,max}? | 直前のパターンのmin回からmax回繰り返し(最短一致)
例1)ABC{3,5}??→ ABCCC |
{min,}? | 直前のパターンのmin回以上繰り返し(最短一致)
例)ABC{3,}??→ ABCCC |
{num}? | 直前のパターンのnum回繰り返し(最短一致)
例1)ABC{3}??→ ABCCC |
・・・(?=?) | 先読み肯定グループ 後方の文字列が?だった場合の・・・にだけ一致する 例1)MIFES(?=9|10)?→ MIFES9、MIFES10 のMIFES部分 |
・・・(?!?) | 先読み否定グループ 後方の文字列が?ではない場合の・・・にだけ一致する 例1)MIFES(?!9|10)?→ MIFES9、MIFES10 以外のMIFES部分 |
(?<=?)・・・ | 後読み肯定グループ 前方の文字列が?だった場合の・・・にだけ一致する 例1)(?<=9|10)MIFES → 9MIFES、10MIFES のMIFES部分 |
(?<!?)・・・ | 後読み否定グループ 前方の文字列が?ではない場合の・・・にだけ一致する 例1)(?<!9|10)MIFES → 9MIFES、10MIFES 以外のMIFES部分 |
INTERNOUS,inc. All rights reserved.