正規表現

基本的なストリングの検索と抽出には、正規表現ではなく、indexOf()substr()substring() などの String クラスのメソッドを使用します。

正規表現を使用して実行できる操作には、String クラスのメソッドを使用して実行できるものもあります。例えば、文字列に別の文字列が含まれるかどうかを検索するには、String.indexOf() メソッドまたは正規表現を使用できます。ただし、String クラスメソッドが使用できる場合、同等の正規表現よりも実行速度が速く、別のオブジェクトを作成する必要がありません。

グループの内容を結果に分離せずにエレメントをグループ化するには、グループ(「(xxxx)」)ではなく、キャプチャなしのグループ(「(?:xxxx)」)を正規表現で使用します。

複雑さが中程度の正規表現では、式の一部をグループ化することがよく行われます。例えば、次の正規表現パターンでは、括弧を使用してテキスト「ab」を囲むグループを作成しています。結果として、「+」限量詞は単一の文字ではなくグループに適用されます。

/(ab)+/

デフォルトでは、各グループの内容が「キャプチャ」されます。正規表現を実行した結果の一部として、パターン内の各グループの内容を取得できます。このようなグループ結果の取得には時間がかかり、必要なメモリも増えます。これは、グループの結果を含むオブジェクトが作成されるからです。代替方法として、開始括弧の後に疑問符とコロンを含めることで、キャプチャなしのグループ構文を使用できます。この構文では、複数の文字がグループとして動作しますが、結果にはキャプチャされません。

/(?:ab)+/

キャプチャなしのグループ構文を使用する方が、標準的なグループ構文を使用するよりも高速で、使用するメモリも減ります。

正規表現のパフォーマンスが悪い場合は、別の正規表現パターンの使用を検討してください。

同じテキストパターンのテストや特定に、複数の正規表現パターンを使用できる場合があります。様々な原因により、あるパターンとその代替パターンでは実行速度が異なります。正規表現によりコードの実行速度が必要以上に遅くなっていると判断した場合は、同じ結果を得られる代替正規表現パターンを使用することを検討してください。考えられる各種の代替パターンをテストし、どのパターンが最速かを判断してください。