2013-01-03 36 views
0

你能解释一下这段代码的功能吗(来自Blair Mitchelmore jquery.query-2.1.6.js)?nodejs正则表达式 - 需要帮助来理解代码

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正则表达式,并且我想确保我理解上面的代码。

感谢, 李

+0

在这一点上什么是你最好的猜测? –

+0

不知道,仍然试图找出匹配正则表达式中的第一个(...)。我看不出为什么支架不平衡... – user429400

回答

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保留pathtokens中的方括号前的部分, e方括号中的内容。

return [base, tokens]; 

返回表示两个变量的两个元素的数组(我不会在这里判断的编码风格,让我们只说我喜欢的对象)

1

你一定很好奇什么实际的代码做或者什么的正则表达式吗?

的代码是很基本的,但这里有可能匹配的解释为您的正则表达式:

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

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

我希望这有助于!

+0

很酷的应用程序,谢谢! – user429400

+0

确实很酷的应用程序。 –

+0

谢谢你们!努力工作了很长时间:) –