RegExp.prototype.[@@match]()‎

من موسوعة حسوب
مراجعة 09:06، 2 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الدالة RegExp.prototype.[@@match]()‎ تُعيد ما يُطابِقه تعبيرٌ نمطيٌ (regular expression) في سلسلة نصية.

البنية العامة

regexp[Symbol.match](str)

str

السلسلة النصية التي سنبحث عن مُطابَقة للتعبير النمطي فيها.

القيمة المعادة

إذا كانت هنالك مُطابَقة بين التعبير النمطي والسلسلة النصية، فستُعاد مصفوفة Array تحتوي على كامل السلسلة النصية المُطابَقة كأوّل عنصر فيها، ويليها أيّة نتائج تمت مُطابَقتها في التعابير النمطية الفرعية الموجودة بين قوسين. وإذا لم تُطابَق أيّة نتائج فستُعاد القيمة null.

الوصف

تُستدعى هذه الدالة داخليًا في الدالة String.prototype.match()‎. فمثلًا، كلا المثالين الآتيين له يُعيد النتيجة نفسها:

'abc'.match(/a/);

/a/[Symbol.match]('abc');

الغرض من وجود هذه الدالة هو السماح بإمكانية تخصيصها في الأصناف الفرعية المشتقة من RegExp.

أمثلة

استدعاء مباشر

ستُستخدَم هذه الدالة بنفس طريقة استخدام الدالة String.prototype.match()‎:

var re = /[0-9]+/g;
var str = '2016-01-02';
var result = re[Symbol.match](str);
console.log(result);  // ["2016", "01", "02"]

استخدام ‎@@match في الأصناف الفرعية

يمكن للأصناف الفرعية المشتقة من الصنف RegExp إعادة تعريف الدالة ‎[@@match]()‎ لتغيير سلوكها الافتراضي:

class MyRegExp extends RegExp {
  [Symbol.match](str) {
    var result = RegExp.prototype[Symbol.match].call(this, str);
    if (!result) return null;
    return {
      group(n) {
        return result[n];
      }
    };
  }
}

var re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)');
var str = '2016-01-02';
var result = str.match(re);   // String.prototype.match calls re[@@match].
console.log(result.group(1)); // 2016
console.log(result.group(2)); // 01
console.log(result.group(3)); // 02

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم 49 غير مدعومة نعم نعم

على النقيض من متصفح IE، يدعم Edge هذه الميزة.

مصادر ومواصفات