javascript - 将带括号的正则表达式匹配传递给函数
问题描述
我有一个包含 mm-yyyy 日期的字符串;yyyy-mm; yyyy-mm-dd 等格式。目标是将日期子字符串的月份部分转换为罗马数字符号,例如
12-2018 ... 2018-12-28
被转换成
XII-2018 ... 2018-XII-28
我使用此函数将常规转换为罗马数字:
// https://stackoverflow.com/questions/9083037/convert-a-number-into-a-roman-numeral-in-javascript
function romanize(num) {
var lookup = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},roman = '',i;
for ( i in lookup ) {
while ( num >= lookup[i] ) {
roman += i;
num -= lookup[i];
}
}
return roman;
}
用于查找月份子字符串的正则表达式是
var re = /(19|20\d{2})\b-(\d{2})/g;
第一个带括号的匹配项 ($1) 仅是 19YY 或 20YY 年。第二个 ($2) 是月份子字符串。问题是我不能将 $2 作为参数传递,即
string = string.replace(re, "$1-" + romanize($2));
解决方案
可能您正在寻找的是类似的东西:
string.replace(re, function(match, p1, p2) {
return p1+'-'+romanize(p2);
});
我希望它对你有帮助!
编辑: function() 中参数的含义是位置的,所以第一个参数将是整个匹配,第二个是第一个括号匹配,第三个是第二个括号匹配......
您还可以传递一个已经存在的函数来替换,例如:
function rep(match, p1, p2) {
p1+'-'+romanize(p2);
}
string.replace(re, rep);
EDIT2:要查找文档,请复制引用的文本并在浏览器的其他选项卡中打开链接,然后在此页面中按 ctrl+f,粘贴下面的文本,然后按一次 ctrl+g,您将进入此部分被解释。
将函数指定为参数
来源:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace
推荐阅读
- python-3.x - Gunicorn 在 docker GPU 运行时上运行
- python - 为什么我的 Tensorflow 训练无限期挂起,没有错误?
- html - 如何将图像从不同的文件夹添加到 HTML
- reactjs - 有没有办法让 npx 在我的计算机上创建一个 React 应用程序?
- python - 由于 matplotlib,pdpbox 无法安装
- javascript - 我如何在内联元素函数调用中附加 event.stopPropogation()
- rust - if let Some 和 match 的区别
- c++ - 检查参数是否存在的 C++ 概念不起作用
- javascript - 滚动未绑定,我被卡住了
- html - When child element is bigger than the parent, how to place the child centered above/below the parent element (plus rotate it)?