يقدّم الإصدار 73 من Chrome طريقة String.prototype.matchAll()
. يتصرّف
بطريقة مشابهة match()
، ولكنّه يعرض عنصر تكرار يتضمّن كل مطابقات التعبير العادي
في تعبير عادي عام أو ثابت. يوفّر ذلك طريقة بسيطة للقيام بدورة متكرّرة على المطابقات، خاصةً عندما تحتاج إلى الوصول إلى مجموعات الالتقاط.
ما هي المشكلة في دالة match()؟
الإجابة المختصرة هي لا شيء، ما لم تكن تحاول عرض مطابقات عالمية باستخدام مجموعات الالتقاط. إليك أحجية برمجة. راجِع الرمز البرمجي التالي:
const regex = /t(e)(st(\d?))/g;
const string = 'test1test2';
const results = string.match(regex);
console.log(results);
// → ['test1', 'test2']
شغِّل هذا الرمز في وحدة تحكّم، ولاحظ أنّه يعرض صفيفًا يحتوي على سلاسل 'test1'
و'test2'
. إذا أزلت علامة g من التعبير العادي، لن أحصل على سوى المجموعة الأولى التي تتطابق مع العبارة. يظهر الإجراء على النحو التالي:
['test1', 'e', 'st1', '2', index: 0, input: 'test1test2', groups: undefined]
تحتوي هذه السلسلة على مطابقة ثانية محتملة تبدأ بـ 'test2'
، ولكن ليس لدي
هذه المطابقة. في ما يلي اللغز: كيف يمكنني الحصول على جميع مجموعات الالتقاط لكل مطابقة؟ يعرض الشرح المقترَح لـ String.prototype.matchAll()
طريقتَين محتملتَين. لن أصف هذه الخطوات لأنّنا نأمل أنّك لن تحتاج إليها بعد الآن.
String.prototype.matchAll()
كيف ستبدو أمثلة الشرح باستخدام matchAll()
؟ الق نظرة.
const regex = /t(e)(st(\d?))/g;
const string = 'test1test2';
const matches = string.matchAll(regex);
for (const match of matches) {
console.log(match);
}
في ما يلي بعض النقاط التي يجب أخذها في الاعتبار. على عكس match()
الذي يعرض صفيفًا عند إجراء بحث شامل، يعرض matchAll()
عنصر تكرار يعمل بشكلٍ جيد مع حلقات for...of
. يُنشئ الموسّع صفيفًا لكل مطابقة، بما في ذلك المجموعات التي تمّ اصطيادها مع بعض الإضافات. في حال طباعة
هذه الرسائل في وحدة التحكّم، ستظهر على النحو التالي:
['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', groups: undefined]
['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', groups: undefined]
قد تلاحظ أنّ قيمة كل مطابقة هي صفيف بالتنسيق نفسه تمامًا الذي تعرضه match()
للتعبيرات العادية غير الشاملة.
مواد إضافية
يُعدّ هذا القسم مخصّصًا بشكل أساسي للمستخدمين المبتدئين في استخدام التعبيرات العادية أو غيرهم ممن ليسوا خبراء في هذا المجال. قد تكون لاحظت أنّ نتائج كلٍّ من match() وmatchAll() (في كلّ تكرار) هي صفائف تحتوي على بعض السمات المُسمّاة الإضافية. أثناء إعداد هذه المقالة، لاحظت أنّ هذه المواقع تحتوي على بعض القصور في مستندات MDN (التي تم إصلاحها). في ما يلي وصف سريع.
index
- فهرس النتيجة الأولى في السلسلة الأصلية في المثال أعلاه، يبدأ
test2
في الموضع 5، وبالتالي يكونindex
له القيمة 5. input
- السلسلة الكاملة التي تمّ تشغيل
matchAll()
عليها. في مثالي، كان هذا الرمز'test1test2'
. groups
- يحتوي على نتائج أي مجموعات اصطياد مُسمّاة محدّدة في تعبيرك العادي.
الخاتمة
إذا فاتتني أي معلومات، يُرجى إعلامي بها في التعليقات أدناه. يمكنك الاطّلاع على مزيد من المعلومات حول التغييرات الأخيرة على JavaScript في التحديثات السابقة أو على موقع V8 الإلكتروني.