2017-07-20 24 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

相關問題