「JavaScript」RegExpのサブクラスで@@match を使用するサンプル

構文
1.RegExpのサブクラスの定義

class CftRegExp extends RegExp {
  [Symbol.match](引数名) {
    //Symbol.matchで渡す引数名を判定
    let 変数 = RegExp.prototype[Symbol.match].call(this, 引数名);

let 変数 = RegExp.prototype[Symbol.match].call(this, 引数名);
2.RegExpのサブクラスを利用します
let 変数1 = new サブクラス名('正規表現式’);
let 変数2 = '対象文字列’
変数2.match(変数1)

使用例

class CftRegExp extends RegExp { //RegExpのサブクラスの定義
  [Symbol.match](target) {
    //Symbol.matchで引数を判定
    let res = RegExp.prototype[Symbol.match].call(this, target);
    if (!res) return null; //一致結果を含まれない
    return { //一致結果を含む配列
      group(n) {
        return res[n];
      }
    };
  }
}

let re = new CftRegExp('([0-9]+)-([a-z]+)-([A-Z]+)'); //サブクラスのオブジェクト変数
let testStr = '2022-study-SKILL'; //対象文字列
let result = testStr.match(re); // String.prototype.match calls re[@@match].
console.log("文字列の正規表現に一致する結果")
console.log("要素1: "+result.group(1)); 
console.log("要素2: "+result.group(2)); 
console.log("要素3: "+result.group(3));

実行結果

> "文字列の正規表現に一致する結果"
> "要素1: 2022"
> "要素2: study"
> "要素3: SKILL"

 

JavaScript

Posted by arkgame