基本的なストリングの検索と抽出には、正規表現ではなく、
indexOf()
、
substr()
、
substring()
などの String クラスのメソッドを使用します。
正規表現を使用して実行できる操作には、String クラスのメソッドを使用して実行できるものもあります。例えば、文字列に別の文字列が含まれるかどうかを検索するには、
String.indexOf()
メソッドまたは正規表現を使用できます。ただし、String クラスメソッドが使用できる場合、同等の正規表現よりも実行速度が速く、別のオブジェクトを作成する必要がありません。
グループの内容を結果に分離せずにエレメントをグループ化するには、グループ(「
(xxxx)
」)ではなく、キャプチャなしのグループ(「
(?:xxxx)
」)を正規表現で使用します。
複雑さが中程度の正規表現では、式の一部をグループ化することがよく行われます。例えば、次の正規表現パターンでは、括弧を使用してテキスト「ab」を囲むグループを作成しています。結果として、「+」限量詞は単一の文字ではなくグループに適用されます。
/(ab)+/
デフォルトでは、各グループの内容が「キャプチャ」されます。正規表現を実行した結果の一部として、パターン内の各グループの内容を取得できます。このようなグループ結果の取得には時間がかかり、必要なメモリも増えます。これは、グループの結果を含むオブジェクトが作成されるからです。代替方法として、開始括弧の後に疑問符とコロンを含めることで、キャプチャなしのグループ構文を使用できます。この構文では、複数の文字がグループとして動作しますが、結果にはキャプチャされません。
/(?:ab)+/
キャプチャなしのグループ構文を使用する方が、標準的なグループ構文を使用するよりも高速で、使用するメモリも減ります。
正規表現のパフォーマンスが悪い場合は、別の正規表現パターンの使用を検討してください。
同じテキストパターンのテストや特定に、複数の正規表現パターンを使用できる場合があります。様々な原因により、あるパターンとその代替パターンでは実行速度が異なります。正規表現によりコードの実行速度が必要以上に遅くなっていると判断した場合は、同じ結果を得られる代替正規表現パターンを使用することを検討してください。考えられる各種の代替パターンをテストし、どのパターンが最速かを判断してください。
|
|
|