TypeScript:
正規表現の使用

どのようにして:

TypeScriptに入ってみて、一般的なタスクに対してregexがどのように使用されているか見てみましょう。

// メールアドレスのregexパターンを定義する
const emailPattern = /\S+@\S+\.\S+/;

// 文字列がメールパターンにマッチするかテストする
const email = "[email protected]";
console.log(emailPattern.test(email)); // 出力: true

// 文字列の数字を見つけて置換する
const replaceDigits = "Item 25 costs $30".replace(/\d+/g, '#');
console.log(replaceDigits); // 出力: "Item # costs $#"

// 文字列から特定の部分を抽出するためにキャプチャグループを使用する
const data = "April 10, 2021";
const datePattern = /(\w+) (\d+), (\d+)/;
const [, month, day, year] = datePattern.exec(data) || [];
console.log(month, day, year); // 出力: "April" "10" "2021"

深掘り

1950年代に、数学者のスティーブン・クリーネは正規言語を表すモデルとして正規表現を記述しました。それは後にコンピュータサイエンスにおいて必須のものとなりました。時は流れ、現在ではテキストを扱うプログラミングにおいてregexは無くてはならないものです。

regexは文字列操作のためのスイスアーミーナイフですが、それに代わるものもあります。タスクの複雑さに応じて、includes()startsWith()endsWith()といった文字列メソッドや、ライブラリによる解析がより良いこともあります。例えば、複雑なJSON文字列をregexで解析するのは悪夢です。代わりにJSONパーサーを使いましょう。

実装に関しては、JavaScriptとTypeScriptのregexはECMAScript言語仕様に基づいています。内部では、エンジンはパターンを効率的にマッチさせるために状態機械を使用しています。regex操作は特に貧弱なパターンでの使用はパフォーマンスにおいてコストがかかることがあり、“災害的バックトラッキング"に注意することが重要です。

参照

  • 正規表現についてのMDN Web Docs: MDN Regular Expressions
  • 正規表現のパターンのテストとデバッグのためのツールRegex101: Regex101
  • 深い理解のための"Mastering Regular Expressions"という本: O’Reilly