2017-07-20 24 views
1

に正規表現で機能を置き換えるに値を追加することができますどのように私はstring="2 HOUR PARKING 7AM-6PM"を持っていると私は次の正規表現を書いた:これは2 HOUR PARKING 7-6になり、私は持っていたい我々は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-18のようになります。午後6時は18時を意味します。置き換え中に$ 2に数値を動的に追加するにはどうすればよいですか? 私も、このいずれかを試してみました:

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

が、置き換える関数は、文字列として扱い、その結果が、誰かが私を助けることができれば素晴らしいだろう2 HOUR PARKING 7-6\+12

です。 ありがとう

+1

{$ 1 +を返す " - " +(12 +のparseInt($ 2,10)); } 'string.replace(REG、関数($ 0、$ 1、$ 2)をしてみてください) '/ \ b(0?[1-9] | 1 [0-2])AM-(0?[1-9] | 1 [0-2])PM/ig' regex –

+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

私は正規表現の定義で$の役割は何ですか?この行では、次のようになります。var reg = new RegExp(/([0-9] +)(AM | PM) - ([0-9] +)(AM | PM)$/i); –

+0

$は、行末に一致するようにします。すなわち、それは入力文字列の終わりにある時間表現にのみ一致する。同じパターンが文字列の前半で繰り返されない場合は、必要ではないかもしれません。 – H77