RegExp.prototype.[@@match]()
الدالة 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 هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).