JS 正規表現の非キャプチャ グループ化使用の分析例

高洛峰
リリース: 2017-01-09 15:48:13
オリジナル
1351 人が閲覧しました

この記事の例では、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 サイトに注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート