你能解释一下这段代码的作用(来自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正则表达式,我想确保我理解上面的代码。
谢谢, 李
答案 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
我希望这有帮助!