JavaScript 正規表現
正規表現(Regular Expression)は、検索パターンを形成する文字のシーケンスです。
この検索パターンは、テキスト検索やテキスト置換操作に使用することができます。
目次
正規表現とは?
正規表現は、検索パターンを形成する文字のシーケンスです。
テキスト内のデータを検索する際に、この検索パターンを使用して検索対象を記述することができます。
正規表現は、単一の文字からより複雑なパターンまで様々な形式で記述できます。
正規表現は、あらゆる種類のテキスト検索やテキスト置換操作に使用することができます。
構文
/pattern/modifiers;
例
/codelabs-jp/i;
例の説明:
/codelabs-jp/i は正規表現です。
codelabs-jp は検索に使用するパターンです。
i は修飾子で、大文字と小文字を区別しない検索を行うように修飾します。
文字列メソッドの使用
JavaScriptでは、正規表現はしばしば、search() および replace() という2つの文字列メソッドと共に使用されます。
search() メソッドは、式を使用して一致を検索し、その一致の位置を返します。
replace() メソッドは、パターンが置換された変更された文字列を返します。
文字列 search() メソッドの使用
search() メソッドは、指定された値を検索し、その一致の位置を返します:
例
let text = "Visit codelabs-jp!";
let n = text.search("codelabs-jp");
n の結果は:
6
正規表現を使用した文字列 search() メソッドの使用
例
正規表現を使用して、大文字と小文字を区別しない検索で “codelabs-jp” を検索します:
let text = "Visit codelabs-jp";
let n = text.search(/codelabs-jp/i);
n の結果は:
6
文字列 replace() メソッドの使用
replace() メソッドは、文字列内の指定された値を別の値で置換します:
let text = "Visit Microsoft!";
let result = text.replace("Microsoft", "codelabs-jp");
正規表現を使用した文字列 replace() メソッドの使用
例
大文字と小文字を区別しない正規表現を使用して、”Microsoft” を “codelabs-jp” に置換します:
let text = "Visit Microsoft!";
let result = text.replace(/microsoft/i, "codelabs-jp");
res の結果は:
Visit codelabs-jp!
気づきましたか?
上記のメソッドで、文字列の代わりに正規表現の引数を使用することができます。
正規表現を使用することで、検索がより強力になります(例えば、大文字と小文字を区別しない検索など)。
正規表現修飾子
修飾子を使用すると、大文字と小文字を区別しない、より広範な検索が可能になります:
修飾子 | 説明 |
---|---|
i | 大文字と小文字を区別しないマッチングを実行します |
g | 全ての一致を見つけます(グローバルマッチ) |
m | 複数行マッチングを実行します |
d | 開始と終了のマッチングを実行します(ES2022で新規追加) |
正規表現パターン
角括弧を使用して文字の範囲を見つけることができます:
式 | 説明 |
---|---|
[abc] | 角括弧内の文字のいずれかを見つけます |
[0-9] | 角括弧内の数字のいずれかを見つけます |
(x|y) | | で区切られた代替のいずれかを見つけます |
メタ文字は特別な意味を持つ文字です:
メタ文字 | 説明 |
---|---|
\d | 数字を見つけます |
\s | 空白文字を見つけます |
\b | \bWORD のように単語の先頭、または WORD\b のように単語の末尾で一致を見つけます |
\uxxxx | 16進数の xxxx で指定された Unicode 文字を見つけます |
量指定子は数量を定義します:
量指定子 | 説明 |
---|---|
n+ | 少なくとも1回の出現を持つ任意の文字列に一致します |
n* | 0回以上の出現を持つ任意の文字列に一致します |
n? | 0回または1回の出現を持つ任意の文字列に一致します |
RegExp オブジェクトの使用
JavaScriptでは、RegExp オブジェクトは事前に定義されたプロパティとメソッドを持つ正規表現オブジェクトです。
test() の使用
test() メソッドは RegExp 式のメソッドです。
これはパターンを検索し、その結果に応じて true または false を返します。
次の例は、文字列内で文字 “e” を検索します:
const pattern = /e/;
pattern.test("The best things in life are free!");
上記のコードの出力は、文字列内に “e” が含まれているため、true になります。
パターンを最初に変数に入れる必要はありません。上記の2行は次のように1行で短縮することができます:
/e/.test("The best things in life are free!");
exec() の使用
exec() メソッドは RegExp 式のメソッドです。
これは指定されたパターンを検索し、見つかったテキストをオブジェクトとして返します。
もし一致するものが見つからない場合は、空の(null)オブジェクトを返します。
次の例は、文字列内で文字 “e” を検索します:
/e/.exec("The best things in life are free!");
注意点
JavaScriptでは、文字列引数の代わりに正規表現引数を使用することができます。
正規表現を使用することで、検索がより強力になります(例えば、大文字と小文字を区別しない検索など)。
JavaScript 正規表現変換テーブル
このテーブルは、さまざまな JavaScript の値を数値、文字列、ブール値に変換した結果を示しています:
元の値 | 数値に変換された値 | 文字列に変換された値 | ブール値に変換された値 |
---|---|---|---|
false | 0 | “false” | false |
true | 1 | “true” | true |
0 | 0 | “0” | false |
1 | 1 | “1” | true |
“0” | 0 | “0” | true |
“000” | 0 | “000” | true |
“1” | 1 | “1” | true |
NaN | NaN | “NaN” | false |
Infinity | Infinity | “Infinity” | true |
-Infinity | -Infinity | “-Infinity” | true |
“” | 0 | “” | false |
“20” | 20 | “20” | true |
“twenty” | NaN | “twenty” | true |
[] | 0 | “” | true |
[20] | 20 | “20” | true |
[10,20] | NaN | “10,20” | true |
[“twenty”] | NaN | “twenty” | true |
[“ten”,”twenty”] | NaN | “ten,twenty” | true |
function(){} | NaN | “function(){}” | true |
{ } | NaN | “[object Object]” | true |
null | 0 | “null” | false |
undefined | NaN | “undefined” | false |