解析查询字符串数据的一种方法是:
GLOBAL={}
"?a=1&b=3&D123=Hello world".replace(
new RegExp(/([^?=&]+)(=([^&]*))?/g),
function($0, $1, $2, $3) {
GLOBAL[$1]=$3
}
)
我是 RegEx 新手,想知道是否有人可以解释 RegEx 表达式如何与变量 $0,$1,$2,$3 一起使用,以使本例中的 GLOBAL[a] = 1。
如果$1=第一组,$2=第二组,等等。$0需要什么?
最佳答案
通常认为更好的做法是为回调参数提供有意义的名称,特别是为了帮助理解。就我个人而言,我会将您的代码编写为:
... .replace(
/([^?=&]+)(?:=([^&]*))?/g, // note slightly different regex ;)
function( _, key, value) {
GLOBALS[key] = value;
}
);
看看仅仅通过阅读就可以更容易地理解正在发生的事情吗? _
是一种约定,意思是“我们对此参数不感兴趣”(这使得“下划线”库对我来说很可笑......XD)
无论如何,与所有回调一样,参数完全取决于函数决定传递的内容。在 .replace()
的情况下,第一个参数是整个匹配,然后从那时起捕获的子模式被一个接一个地给出 - 这就是为什么我说“括号太多”在我的评论中,您可以在我的版本中看到我使用 (?:
来指定非捕获子模式。
关于javascript - 解析 CGI 查询字符串正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24076502/