ホームページ > 記事 > ウェブフロントエンド > JS 正規表現の非キャプチャ グループ化使用の分析例
この記事の例では、JS 正規表現の非キャプチャ グループ化の使用について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
最近 JsonSQL を調べていたとき、ソース コード内の正規表現を通じて、非キャプチャ グループ化とは何か、およびその使用シナリオを学びました。 js では、通常のキャプチャのグループ化形式は (XX)、非キャプチャのグループ化形式は (?:XX) です。正規表現の量指定子から始めましょう。文字 b を少なくとも 1 回出現させる必要がある場合は、通常の /b+/ を使用できます。ab を少なくとも 1 回出現させる必要がある場合は、/(ab)+/ を使用する必要があります。 /ab+/ではありません。つまり、複数の文字に量指定子を使用する場合は、括弧を使用する必要があります。
var str = "a1***ab1cd2***c2"; var reg1 = /((ab)+\d+)((cd)+\d+)/i; var reg2 = /((?:ab)+\d+)((?:cd)+\d+)/i; alert(str.match(reg1));//ab1cd2,ab1,ab,cd2,cd alert(str.match(reg2));//ab1cd2,ab1,cd2
キャプチャ グループと非キャプチャ グループの違いがわかります。非キャプチャ グループはマッチングにのみ使用され、グループのコンテンツは抽出されません。つまり、括弧を使用して数量詞を含む一部の文字を変更するだけの場合は、非キャプチャ グループであるこのグループの内容は必要ありません。
次のコードは、SQL ステートメント内のさまざまなサブフラグメントを抽出するために使用されており、非キャプチャ グループを広範囲に使用しているため、詳しく見ることができます。
var returnfields = sql.match(/^\s*SELECT\s+((?:[0-9A-Za-z_]+\s*,\s*)+[0-9A-Za-z_]+ |\*|[0-9A-Za-z_]+)\s+FROM\s+([a-z0-9A-Z_]+)(?: where\s+(.+))?(?:\s+order\s+by\s+([a-z0-9_A-Z]+)(?:\s+(asc|desc|ascnum|descnum)?))?(?:\s+limit\s+(\d+,\d+))?/i); var ops = { fields: returnfields[1].replace('\s','').split(','), from: returnfields[2].replace('\s',''), where: (returnfields[3] == undefined)? "true":returnfields[3], orderby: (returnfields[4] == undefined)? []:returnfields[4].replace('\s','').split(','), order: (returnfields[5] == undefined)? "asc":returnfields[5], limit: (returnfields[6] == undefined)? []:returnfields[6].replace('\s','').split(',') };
この正規表現についてはいくつかの説明があります:
1. フィールド名と表示は、大文字、小文字、数字、アンダースコアのみで構成できます。
2. where 以降の条件は () 内に入れる必要があります。そうでないと一致しません。これは実際の SQL とは異なります。
3. 選択後のフィールドには、単一フィールド、複数フィールド (カンマで区切られる)、およびすべてのフィールド (* で示される) の 3 つの形式があります。
4. where サブステートメント、order by サブステートメント、およびlimit サブステートメントはすべてオプションです。
次のテキストは上記の正規表現と一致します:
select age from data where (name=='aty')
この記事が JavaScript プログラミングのすべての人に役立つことを願っています。
JS 正規表現の非キャプチャ グループ化使用例に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。