正規表現グループのキャプチャ

序文

同僚は、バックエンドから与えられるデータが想像を超えていて、文字列を自分で処理する必要があり、普通に書くのが少し面倒だと不満を言いました。規則性の時間です!

必要

文字列を次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

以上!

おすすめ

転載: blog.csdn.net/weixin_54858833/article/details/126830400