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