2017-07-20 76 views
1

我有一个string="2 HOUR PARKING 7AM-6PM"和我写了下面的正则表达式:我们如何才能增加值的替换功能在正则表达式中的JavaScript

var string = "2 HOUR PARKING 7AM-6PM" 
var reg =new RegExp(/([0-9])AM\-([0-9])PM/ig); 
string = string.replace(reg,"$1-$2") 

这个结果2 HOUR PARKING 7-6,但我想有一个结果如2 HOUR PARKING 7-18自下午6点以来意味着18:00点。如何在更换时动态地将数字添加到$ 2? 我甚至尝试这一个:

string = string.replace(eg,"$1-$2\+12") 

但替换功能把它作为一个字符串,其结果是2 HOUR PARKING 7-6\+12

这将是巨大的,如果有人可以帮助我。 谢谢

+1

尝试'与string.replace(REG,函数($ 0,$ 1,$ 2){ 返回$ 1 + “ - ” +(12 + parseInt函数($ 2,10)); } (0?[1-9] | 1 [0-2])AM-(0?[1-9] | 1 [0-2])PM/ig'正则表达式 –

+0

我试过了,这是行不通的。你能否解释一下功能($ 0. $ 1,$ 2)?谢谢 –

+0

请参阅https://jsfiddle.net/n29r0j8u/ –

回答

1

您可以pass in a function to the string replace参数来计算时间的24小时值。

function convertTime(time, ampm) { 
 
    time = parseInt(time); 
 

 
    if (ampm.toUpperCase() === "PM") 
 
    time += 12; 
 

 
    return time; 
 
} 
 

 
var str = "2 HOUR PARKING 7AM-9PM"; 
 
var reg = new RegExp(/([0-9]+)(AM|PM)-([0-9]+)(AM|PM)$/i); 
 

 
str = str.replace(reg, function(match, from, fromP, to, toP) { 
 
    return convertTime(from, fromP) + "-" + convertTime(to, toP); 
 
}); 
 

 
console.log(str);

+0

非常感谢。它的工作原理:) –

+0

请问你在正则表达式的定义中$的作用是什么? (AM/PM) - ([0-9] +)(AM | PM)$/i); –

+0

$是匹配行的末尾。即它只会匹配输入字符串末尾的时间表示。如果相同的模式不会在字符串的早期重复,则可能不需要。 – H77

相关问题