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,

一个变量被声明,一个正则表达式被定义并存储为第二个变量。

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

仍在变量声明块中,此正则表达式在函数参数上执行:

  • /^正则表达式分隔符,字符串开头
  • ([^[]+?)至少匹配一个字符,尽可能少,不匹配任何左方括号。捕获。
  • (\[.*\])?匹配一个左方括号,任何东西,然后是一个右方括号。与括号一起捕获。
  • $/字符串结尾,正则表达式分隔符。

此正则表达式将分隔path两个参数。第一个方括号之前的任何内容,以及任何方括号内的任何内容(强制)。

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

假设正则表达式匹配,这将调用第一个匹配“base”,并将创建一个名为“tokens”的空数组。

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

这将重复匹配方括号上第一个定义的正则表达式,并从捕获的值构建一个数组。正则表达式匹配:

  • \[一个左方括号,
  • ([^[]*)不包括左方括号的任何其他内容(已捕获),
  • \]和一个右方括号

此时,假设path参数格式正确,base保存 中方括号之前的部分path,并tokens保存方括号的内容。

return [base, tokens];

将所说的两个变量作为二元素数组返回(我不会在这里判断编码风格;假设我更喜欢一个对象)

于 2013-01-03T14:34:22.533 回答
1

您是否好奇实际代码的作用或正则表达式的作用?

该代码非常基本,但这里有一个解释,可能匹配您的两个正则表达式:

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

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

我希望这有帮助!

于 2013-01-03T14:22:28.683 回答