0

このコードが何をするのか説明していただけますか(Blair Mitchelmore jquery.query-2.1.6.jsから)?

    var parse = function(path) {
      var m, rx = /\[([^[]*)\]/g, match = /^([^[]+?)(\[.*\])?$/.exec(path), base = match[1], tokens = [];
      while (m = rx.exec(match[2])) tokens.push(m[1]);
      return [base, tokens];
    };

nodejs正規表現を学び始めたばかりですが、上記のコードを確実に理解したいと思います。

ありがとう、李

4

2 に答える 2

2
var m, rx = /\[([^[]*)\]/g,

変数が宣言され、正規表現が定義され、2番目の変数として格納されます。

match = /^([^[]+?)(\[.*\])?$/.exec(path),

まだ変数宣言ブロック内で、この正規表現は関数の引数で実行されます。

  • /^正規表現区切り文字、文字列の先頭
  • ([^[]+?)少なくとも1つの文字に一致し、可能な限り少なく、開き角かっこには一致しません。キャプチャされました。
  • (\[.*\])?開き角かっこ、何でも一致し、次に閉じ角かっこに一致します。ブラケットと一緒にキャプチャされます。
  • $/文字列の終わり、正規表現の区切り文字。

この正規表現はpath、2つの引数を分離します。最初の角括弧の前のすべて、および角括弧の内側のすべて(必須)。

base = match[1], tokens = [];

これにより、正規表現が一致したと想定して最初の一致が「ベース」と呼ばれ、「トークン」という名前の空の配列が作成されます。

while (m = rx.exec(match[2]))
  tokens.push(m[1]);

これは、角括弧上で最初に定義された正規表現と繰り返し一致し、キャプチャされた値から配列を構築します。正規表現の一致:

  • \[開き角かっこ、
  • ([^[]*)開き角かっこ(キャプチャされた)を含まないその他のもの、
  • \]閉じ角かっこ

この時点で、path引数が整形式であると仮定するとbase、は、の角括弧の前の部分を保持し、角括弧の内容を保持しますpathtokens

return [base, tokens];

上記の2つの変数を2要素配列として返します(ここではコーディングスタイルを判断しません。オブジェクトが望ましいとだけ言っておきましょう)。

于 2013-01-03T14:34:22.533 に答える
1

実際のコードが何をするのか、正規表現が何をするのか知りたいですか?

コードは非常に基本的ですが、両方の正規表現に一致する可能性のある説明を次に示します。

/\[([^[]*)\]/g-> http://regex101.com/r/uP0hR6

/^([^[]+?)(\[.*\])?$/-> http://regex101.com/r/wG3aG4

これがお役に立てば幸いです。

于 2013-01-03T14:22:28.683 に答える