我有一个字符串,其中的日期以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)是month子字符串。问题是我无法传递$ 2作为参数,即
string = string.replace(re, "$1-" + romanize($2));
答案 0 :(得分:1)
可能您正在寻找的东西是这样的:
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