nodejs正则表达式 - 需要帮助来理解代码

时间:2013-01-03 14:01:53

标签: regex node.js

你能解释一下这段代码的作用(来自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正则表达式,我想确保我理解上面的代码。

谢谢, 李

2 个答案:

答案 0 :(得分: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];

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

答案 1 :(得分:1)

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

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

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

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

我希望这有帮助!