javascript - 解析 CGI 查询字符串正则表达式

标签 javascript regex

解析查询字符串数据的一种方法是:

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/

相关文章:

javascript - 学习 jQuery 的选项卡 + CSS Flexbox。任何人都可以帮助完成这项工作吗?

JavaScript:我自己的解析器的动态正则表达式

javascript - 在 JS 中使用 Regex 过滤字符串/URL

javascript - 如何使用 jQuery 删除字符串中的句点

regex - Scala列表匹配正则表达式

javascript - D3 : enter(), 鼠标悬停/鼠标悬停时 exit()

javascript - Angular、React 和 Blaze(客户端 Meteor)之间的主要设计差异?

javascript - 无法使用 SweeAlert (angular-sweetalert) 更新 AngularJs 中的 View 调用两次更新 View 。为什么?

javascript - 制作姓名和年龄输入警报器

regex - 有条件替换 pandas df 中的数字