1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WebフロントエンドAdvent Calendar 2024

Day 10

正規表現と文字クラス・フラグ

Last updated at Posted at 2024-12-11

正規表現

正規表現は文字パターンを表す記法で、JavaScriptでは/foo/new RegExp("foo")のようにして正規表現を表すオブジェクトを生成できます。

正規表現で使用される文字クラス・フラグについて簡単にまとめてみます。

文字クラス

[abc]のように[]で囲むことで宣言できます。
この例ではaまたはbまたはcにマッチします。

-を使用すると範囲指定ができます。
[1-9]1から9を、[a-z]aからzまでを表します。

他にも、\dのようにバックスラッシュと文字で指定できる汎用的な文字クラスがいくつか用意されています。

よく使われる文字クラス

\d:ASCII文字での数字。[0-9]と同じ。
\D:ASCII文字での数字以外。[^0-9]と同じ。
\s:Unicode空白文字。改行なども含まれています。
\S:Unicode空白文字以外。
\w:ASCII文字での単語文字。[A-Za-z0-9_]と同じ。
\W:ASCII文字での単語文字以外。[^A-Za-z0-9_]と同じ。
.:Unicodeの行末文字(改行)以外の文字。

正規表現中のエスケープ

^で否定を表すように、正規表現では特別な意味を持つ文字がいくつかあります。
この^自体を正規表現で使用したいときには\でエスケープする必要があります。

以下はエスケープしている文字自体を表します。
\^, \$, \\, \., \*, \+, \?, \(, \), \[, \], {, }, \|, \/

文字によっては\をつけると、\dのように別の意味を持つようになるため注意が必要です。

正規表現のフラグ

正規表現//の2つ目の/のあとに特定の文字(フラグ)を記述することで、正規表現の動作を変更できます。
フラグには、g,i,m,s,uなどがあります。

gフラグ

//gのようにgを指定すると、正規表現に最初にマッチしたものだけでなく、文字列内での全てのマッチを検索するようになります。

iフラグ

大文字・小文字の区別をしなくなります。

mフラグ

文字列が改行されている場合、^$は文字列の先頭と末尾だけでなく、各行の先頭と末尾にもマッチするようになります。

sフラグ

.が改行も含めてマッチするようになります。

uフラグとUnicode 文字クラス

\u{}によるコードポイントの指定や\p{}\P{}の使用が可能になります。
/\u{61}/はuが61回繰り返したものにマッチしますが、/\u{61}/uはコードポイントU+0061aにマッチするようになります。
また、サロゲートペア文字など複数の文字として扱われてしまう文字も1文字として扱われるようになります。

他にも、\p{}によってUnicode文字クラスを使用することができるようになります。
/\p{Decimal_Number}/uのようにUnicode文字プロパティを指定することができます1

/\p{Decimal_Number}/u.test('٣') //true
/\d/.test('٣') //false

\dではアラビア数字の0から9にしかマッチしませんが、/\p{Decimal_Number}/uであればインド数字٣2などにもマッチするようになります。

yフラグ

RegExpメソッドであるexectestで正規表現オブジェクトのlastIndex番目のインデックスから検索するようになります。
また、String.prototype.matchRegExp.prototype.execの挙動が変わります。

  1. Unicode文字には複数のUnicode文字プロパティが設定されています。

  2. ٣はアラビア数字で3にあたる数字です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?