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

من موسوعة حسوب

الدالة RegExp.prototype.[@@split]()‎ تقسم كائن String إلى مصفوفة من السلاسل النصية بفصلها إلى سلاسل نصية فرعية.

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

regexp[Symbol.split](str[, limit])

str

السلسلة النصية التي نريد قسمها.

limit

عدد صحيح يضبط الحد الأقصى لعدد الأجزاء التي ستُقسَّم السلسلة النصية إليها. وعند تحديد قيمة لهذا الوسيط، فستُقسِّم هذه الدالة السلسلة النصية عند كل مُطابَقة للتعبير النمطي، لكنها ستتوقف عند بلوغ عدد عناصر المصفوفة القيمة المُحدَّدة بالوسيط limit. لاحظ أنَّ من الممكن أن تكون هنالك عناصر في المصفوفة عددها أقل من قيمة limit.

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

مصفوفة من أقسام السلسلة النصية الأصل.

الوصف

تُستدعى هذه الدالة داخليًا في الدالة String.prototype.split()‎ وذلك إذا كان الوسيط separator هو كائن RegExp. فمثلًا، كلا المثالين الآتيين له يُعيد النتيجة نفسها:

'a-b-c'.split(/-/);

/-/[Symbol.split]('a-b-c');

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

إذا لم يكن الوسيط separator هو كائن من النوع RegExp، فلن تستدعي الدالة String.prototype.split()‎ هذه الدالة، ولن تُنِشئ كائن RegExp من الأساس.

أمثلة

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

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

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

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

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

class MyRegExp extends RegExp {
  [Symbol.split](str, limit) {
    var result = RegExp.prototype[Symbol.split].call(this, str, limit);
    return result.map(x => "(" + x + ")");
  }
}

var re = new MyRegExp('-');
var str = '2016-01-02';
var result = str.split(re); // String.prototype.split calls re[@@split].
console.log(result); // ["(2016)", "(01)", "(02)"]

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

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

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

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