"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التقاط مجموعات متعددة في JavaScript Regex المتكرر؟

كيفية التقاط مجموعات متعددة في JavaScript Regex المتكرر؟

تم النشر بتاريخ 2024-11-26
تصفح:690

How to Capture Multiple Groups in a Repeated JavaScript Regex?

التقاط مجموعات عشوائية في JavaScript Regexp

عند استخدام مجموعات الالتقاط في تعبيرات JavaScript العادية، من الضروري فهم القيود. افتراضيًا، يتم الاحتفاظ فقط بالالتقاط الأخير لمجموعة متكررة، حتى لو كانت المجموعة متداخلة.

مثال: مجموعة الالتقاط المتداخلة

ضع في اعتبارك التعبير العادي التالي:

/^(\s*\w ) $/

الإخراج المتوقع:

["foo bar baz", "foo", " bar", " baz"]

الإخراج الفعلي:

["foo bar baz", " baz"]

في هذه الحالة، فقط عودة آخر مجموعة تم أسرها "باز". وذلك لأن جافا سكريبت يحتفظ فقط بالالتقاط النهائي لكل مجموعة متكررة.

خيارات لالتقاط مجموعات متعددة

للتغلب على هذا القيد، تتوفر عدة خيارات:

  • التقسيم على المحددات: إذا أمكن، استخدم تقسيم السلسلة لفصل المحددات المطلوبة المقاطع.
  • حلقة Exec والتقسيم: استخدم حلقة exec لمطابقة النمط بشكل متكرر داخل سلسلة وتقسيم المجموعة الملتقطة إلى مطابقات فردية.
  • متعدد المستويات المطابقة: التقط المجموعة المتكررة في مباراة واحدة ثم استخدم تعبيرًا عاديًا آخر لاستخراج الفرد المقاطع.

مثال: Exec Loop and Splitting

إليك مثال باستخدام حلقة exec لالتقاط وتقسيم مجموعة متداخلة:

var text = "a;b;;g;h;i;;j;k;"; var r = //g; مباراة فار؛ بينما ((match = r.exec(text)) != null) { print(match[1].split(";")); } // الإخراج: // ["ج"، "د"، "ه"، "و"] // ["xx"، "yy"، "zz"]
var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w (;\w )*)>/g;
var match;

while ((match = r.exec(text)) != null) {
  print(match[1].split(";"));
}

// Output:
// ["c", "d", "e", "f"]
// ["xx", "yy", "zz"]
في هذا المثال، يتم التقاط المجموعة المتداخلة كمجموعة 1، والتي يتم بعد ذلك تقسيمها على الفاصلة المنقوطة.

الأسئلة ذات الصلة

    كيف يمكنك الوصول إلى المجموعات المطابقة في تعبير جافا سكريبت العادي؟
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3