字符串正则替换replace第二个参数是函数的问题
2024-09-21 02:16:49
按照JS高程的说法,如下
replace()方法的第二个参数也可以是一个函数。在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递3个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串。在正则表达式中定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项......,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串。
高程的这种描述是有问题的,根据高程理解,若函数参数只有2个参数,那这两个参数应分别是模式的匹配项在字符串中的位置和原始字符串。其实,这这两个参数还是模式的匹配项、第一个捕获组的匹配项。内部实现应该是用了arguments[0]、arguments[1]。下面这2段代码可以进行理解。
var toUrl = 'user/add?id=$18&t=update'.replace(/\$(\d+)/g, function (a, b) {
console.log(a);
console.log(b);
});
结果
var toUrl = 'user/add?id=$18&t=update'.replace(/\$(\d+)/g, function (a, b, c, d) {
console.log(a);
console.log(b);
console.log(c);
console.log(d);
});
结果
最新文章
- Hacker Rank: Two Strings - thinking in C# 15+ ways
- VB常用字符串操作函数
- C# 利用socekt做到http监听,怎么样才能做到高性能
- postgresql流复制配置
- C#虚方法
- jQuery radio change事件 checkbox选中事件
- JS Resizable Panel 练习
- HDU 5794:A Simple Chess(Lucas + DP)
- Winfrom子窗体刷新父窗体
- Nginx、LVS及HAProxy负载均衡软件的优缺点详解
- 2D image convolution
- 桂电在线_微信公众平台开发之-运用angularjs显示学校公告新闻列表和详情页面
- javacc
- SQL点滴21—几个有点偏的语句
- Web层框架对网站中所有异常的统一解决
- 447. Number of Boomerangs
- QuickStart系列:docker部署之Elasticsearch
- Python面试笔记一
- Jquery+H5验证数据(不是表单验证啊 )
- Vue2+VueRouter2+webpack 构建项目实战(一):准备工作