👁️

JavaScript 正規表現

2024/08/28に公開

🔅Tips

正則表現とは?
正規表現とは 「正規表現」とは、「検索」や「置換」で指定する文字列をパターン表現する方法で、プログラミング言語やテキストエディタなどで利用できます。

正規表現を考えた人は誰ですか?
正規表現は,歴史的には1940年代の形式言語論に由来しますが,C言語とUNIXの開発に貢献したKen Thompson氏が1970年前後にQEDというエディタ・ソフトウエア(エディタ),ついでedと呼ばれるUNIX上のエディタに文字列検索用として組み込んだことから,コンピュータの世界でも利用されるようになりました。

正規表現のチートシート

基本的なメタ文字

パターン 説明
. 任意の1文字
^ 行の先頭
$ 行の末尾
* 直前の文字が0回以上繰り返される
+ 直前の文字が1回以上繰り返される
? 直前の文字が0回または1回繰り返される
\ エスケープ文字(メタ文字を文字として扱う)

文字クラス

パターン 説明
[abc] abcのいずれか1文字
[^abc] abc以外の任意の1文字
[a-z] 小文字のアルファベット1文字
[A-Z] 大文字のアルファベット1文字
[0-9] 数字1文字
\d 数字1文字([0-9]と同じ)
\D 数字以外の1文字([^0-9]と同じ)
\w 英数字またはアンダースコア1文字([a-zA-Z0-9_]と同じ)
\W 英数字またはアンダースコア以外の1文字([^a-zA-Z0-9_]と同じ)
\s 空白文字(スペース、タブ、改行など)
\S 空白文字以外の1文字

繰り返し

パターン 説明
{n} 直前の文字がちょうどn回繰り返される
{n,} 直前の文字がn回以上繰り返される
{n,m} 直前の文字がn回以上m回以下繰り返される

グループ化と参照

パターン 説明
(abc) abcのグループ
(?:abc) 非キャプチャグループ(後方参照しない)
\1, \2, ... キャプチャグループの後方参照

位置指定子

パターン 説明
\b 単語の境界
\B 単語の境界以外

パターン 説明
^\d{3}-\d{4}$ 郵便番号(例: 123-4567)
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ メールアドレス
\b\d{3}-\d{4}\b 文中の郵便番号(例: "住所は123-4567です")

正規表現の使用例

使用例 説明
str.replace(/a/g, '') 特定の文字(例: a)を除外する
str.match(/\d+/g) 数字のみを抽出する
str.match(/[ァ-ヶー]+/g) カタカナのみを抽出する
str.match(/[ぁ-ん]+/g) ひらがなのみを抽出する
str.match(/[a-zA-Z]+/g) アルファベットのみを抽出する
str.match(/[A-Z]+/g) 大文字のみを抽出する
str.match(/[a-z]+/g) 小文字のみを抽出する

使用例のコード

// 特定の文字(例: 'a')を除外する
const str1 = "apple banana grape";
const result1 = str1.replace(/a/g, ''); // 'pple bnn grpe'
console.log(result1);

// 数字のみを抽出する
const str2 = "abc123def456";
const result2 = str2.match(/\d+/g); // ['123', '456']
console.log(result2);

// カタカナのみを抽出する
const str3 = "カタカナとひらがなと漢字";
const result3 = str3.match(/[-]+/g); // ['カタカナ']
console.log(result3);

// ひらがなのみを抽出する
const str4 = "カタカナとひらがなと漢字";
const result4 = str4.match(/[-]+/g); // ['ひらがな']
console.log(result4);

// アルファベットのみを抽出する
const str5 = "abc123DEF456";
const result5 = str5.match(/[a-zA-Z]+/g); // ['abc', 'DEF']
console.log(result5);

// 大文字のみを抽出する
const str6 = "abcDEFghi";
const result6 = str6.match(/[A-Z]+/g); // ['DEF']
console.log(result6);

// 小文字のみを抽出する
const str7 = "abcDEFghi";
const result7 = str7.match(/[a-z]+/g); // ['abc', 'ghi']
console.log(result7);

log

pple bnn grpe
[ '123', '456' ]
[ 'カタカナ' ]
[ 'とひらがなと' ]
[ 'abc', 'DEF' ]
[ 'DEF' ]
[ 'abc', 'ghi' ]

Discussion