序文
同僚は、バックエンドから与えられるデータが想像を超えていて、文字列を自分で処理する必要があり、普通に書くのが少し面倒だと不満を言いました。規則性の時間です!
必要
文字列を次1-5|08:00:00-18:00:00
のように変換します周一至周五 08:00-18:00
操作する
導入
通常の通常のマッチングはここでは繰り返されません。Regex にはグループ キャプチャと呼ばれる実用的な機能があり、実際に()
正規表現のパケットを取得してグループに変換します。川や湖を持っている人もいます。グループがあり、グループ番号があります。グループ番号は自動的に割り当てられ、グループはグループ番号によって参照できます (これは非常に重要です)。
書く
必要なデータを取得するには、元の文字列を 4 つのグループに分割し、それぞれ 1、5、08:00、18:00 に一致させる必要があります。数字は一致しやすい 一致させるには、や\d
などの特殊文字を使用する時間的には、だらだらと使用する最終的なグループ化は次のように記述されます。-
|
.
\d
/(\d).(\d).([\d]{2}:[\d]{2})(?:.[\d]{2}).([\d]{2}:[\d]{2})(?:.[\d]{2})/gi
ラッピングされているグループは4つだけではないようです()
が、実際には最初に2つのグループがあり、?:
これは攻略に参加しないことを意味し、つまりグループ番号は割り当てられません
引用
デフォルトのグループ番号は 1 から始まります。JS では、$1、$2... を使用して、グループに一致するコンテンツを参照します。
const str = "1-5|08:00:00-18:00:00";
const reg = /(\d).(\d).([\d]{2}:[\d]{2})(?:.[\d]{2}).([\d]{2}:[\d]{2})(?:.[\d]{2})/gi;
const result = str.replace(reg, "周$1至周$2 $3-$4");
console.log(result); // 周1至周5 08:00-18:00
さらに処理するには、1 と 5 を対応する週に置き換えます。replace の 2 番目のパラメータは関数にすることができ、関数内の通常の一致結果を参照するには、次のような別の方法が必要です。RegExp.$1
const str = "1-5|08:00:00-18:00:00";
const reg = /(\d).(\d).([\d]{2}:[\d]{2})(?:.[\d]{2}).([\d]{2}:[\d]{2})(?:.[\d]{2})/gi;
const weekList = ["日", "一", "二", "三", "四", "五", "六"];
const res = str.replace(reg, () => {
return `周${
weekList[RegExp.$1]}至周${
weekList[RegExp.$2]} ${
RegExp.$3}-${
RegExp.$4
}`;
});
console.log(res); // 周一至周五 08:00-18:00
以上!