コンテンツにスキップ

JavaScript/RegExp

出典: フリー教科書『ウィキブックス(Wikibooks)』

RegExpオブジェクトは、正規表現を扱うためのラッパーオブジェクトです。RegExpオブジェクトのすべてのインスタンスは、RegExpオブジェクトのプロトタイプであるRegExp.prototypeを継承します。RegExp.prototypeに定義されたすべてのプロパティやメソッドは、RegExpオブジェクトのインスタンスから参照することができます。RegExpオブジェクトはObjectオブジェクトのプロパティやメソッドを継承します。

正規表現の作成

[編集]

正規表現は、リテラル記法またはコンストラクタを使用して作成できます。

リテラル記法

[編集]
const regex = /pattern/flags;

コンストラクタ記法

[編集]
const regex = new RegExp('pattern', 'flags');

静的メソッド

[編集]

プロパティ

[編集]
RegExp.$&
RegExp.$'
RegExp.$+
RegExp.$1
RegExp.$2
RegExp.$3
RegExp.$4
RegExp.$5
RegExp.$6
RegExp.$7
RegExp.$8
RegExp.$9
RegExp.$_
RegExp.$`
RegExp.input
RegExp.lastMatch
RegExp.lastParen
RegExp.leftContext
RegExp.length
RegExp.name
RegExp.prototype
RegExp.rightContext

インスタンスメソッド

[編集]
RegExp.prototype.compile()
RegExp.prototype.constructor()
RegExp.prototype.exec()
指定された文字列に対して正規表現の検索を実行し、結果の配列を返します。
RegExp.prototype.test()
指定された文字列に対して正規表現の検索を実行し、マッチするかどうかを真偽値で返します。
RegExp.prototype.toString()
正規表現オブジェクトを文字列に変換して返します。

パターン

[編集]

正規表現のパターンは、文字列の検索や置換を行うための強力なツールです。正規表現のパターンは、特定の文字列パターンを表現するために使用される特殊な構文です。この節では、正規表現のパターンの構文とその構成要素について詳しく説明します。

パターンの基本構文

[編集]

正規表現のパターンは、以下のような基本要素から構成されます。

  • リテラル文字: 文字そのものを表します。例えば、a は文字 "a" にマッチします。
  • メタ文字: 特殊な意味を持つ文字です。例えば、. は任意の1文字にマッチします。

以下に、主要なメタ文字とその意味を示します。

主要なメタ文字とその意味
メタ文字 説明
. 任意の1文字にマッチします。
^ 文字列の先頭にマッチします。
$ 文字列の末尾にマッチします。
\ エスケープ文字。次の文字をリテラルとして扱います。
* 直前の文字が0回以上繰り返されることにマッチします。
+ 直前の文字が1回以上繰り返されることにマッチします。
? 直前の文字が0回または1回現れることにマッチします。
{n} 直前の文字がちょうどn回現れることにマッチします。
{n,} 直前の文字がn回以上現れることにマッチします。
{n,m} 直前の文字がn回以上m回以下現れることにマッチします。
[文字] 角括弧内の任意の1文字にマッチします。
[^文字] 角括弧内の以外の任意の1文字にマッチします。
| OR条件を表します。

パターンの例

[編集]

以下に、いくつかの正規表現パターンの例を示します。

例1: メールアドレスの検索

[編集]
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailPattern.test('example@example.com')); // true
console.log(emailPattern.test('invalid-email')); // false

例2: 電話番号の検索

[編集]
const phonePattern = /^\d{3}-\d{3}-\d{4}$/;
console.log(phonePattern.test('123-456-7890')); // true
console.log(phonePattern.test('123-4567')); // false

例3: URLの検索

[編集]
const urlPattern = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
console.log(urlPattern.test('https://example.com')); // true
console.log(urlPattern.test('ftp://example.com')); // false

パターンの構成要素

[編集]

正規表現のパターンは、以下のような構成要素から成り立ちます。

  1. Disjunction (選択): | を使用して、複数のパターンのいずれかにマッチすることを指定します。
       const pattern = /cat|dog/;
       console.log(pattern.test('cat')); // true
       console.log(pattern.test('dog')); // true
       console.log(pattern.test('bird')); // false
    
  2. Alternative (連続): 複数のパターンを連続して指定します。
       const pattern = /abc/;
       console.log(pattern.test('abc')); // true
       console.log(pattern.test('ab')); // false
    
  3. Term (項): 単一のパターン要素を表します。例えば、a\d など。
  4. Assertion (アサーション): 文字列の特定の位置にマッチするパターンです。例えば、^ (先頭) や $ (末尾) など。
       const pattern = /^Hello/;
       console.log(pattern.test('Hello World')); // true
       console.log(pattern.test('World Hello')); // false
    
  5. Quantifier (量指定子): 直前のパターンの繰り返し回数を指定します。例えば、* (0回以上) や + (1回以上) など。
       const pattern = /a+/;
       console.log(pattern.test('aa')); // true
       console.log(pattern.test('')); // false
    
  6. Atom (原子): パターンの最小単位です。例えば、リテラル文字やエスケープシーケンスなど。
       const pattern = /\d/;
       console.log(pattern.test('1')); // true
       console.log(pattern.test('a')); // false
    

Unicode モード

[編集]

正規表現は、Unicode モードで動作することができます。Unicode モードでは、Unicode 文字を正しく扱うことができます。例えば、\p{Script=Hiragana} はひらがなにマッチします。

const unicodePattern = /\p{Script=Hiragana}/u;
console.log(unicodePattern.test('あ')); // true
console.log(unicodePattern.test('a')); // false

まとめ

[編集]

正規表現のパターンは、文字列の検索や置換を行うための強力なツールです。基本的な構文から、Unicode モードまで、さまざまな機能を活用することで、複雑な文字列パターンも簡単に表現できます。正規表現をマスターすることで、文字列処理の効率が大幅に向上します。

下位階層のページ

[編集]

脚註

[編集]


外部リンク

[編集]