「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"