البرمجة

فارق Positive Lookahead و Non-Capturing Group

الفرق بين Positive Lookahead و Non-Capturing Group في JavaScript:

في لغة JavaScript، يُستخدم كل من Positive Lookahead و Non-Capturing Group لأغراض معينة عند كتابة تعابير منتظمة (Regular Expressions) للبحث عن نماذج محددة في النصوص. وعلى الرغم من أن كلاهما يستخدم لاستبعاد جزء من النص في النتيجة النهائية، إلا أنهما يختلفان في الطريقة التي يتم بها هذا الاستبعاد والتأثير الذي يكون له على النتائج.

Positive Lookahead (التحقق المتفائل):
تستخدم Positive Lookahead للبحث عن نمط محدد يتبع النمط الرئيسي، دون أن يتم تضمينه في النتيجة النهائية. يتأكد Positive Lookahead من وجود النمط المحدد بعد النمط الرئيسي دون أن يتأثر بمطابقته. لاحظ أن Positive Lookahead يبدأ بـ (?=.

مثال على استخدام Positive Lookahead:
فرضاً أن لدينا نص يحتوي على قائمة من الأرقام المفصولة بفواصل، ونريد استخراج الأرقام التي تأتي بعد الرقم 5. في هذه الحالة، يمكن استخدام Positive Lookahead لتحديد الأرقام التي تلي الرقم 5 دون أن نشمل الرقم 5 نفسه في النتيجة.

التعبير العادي: /5(\d+)/
التعبير باستخدام Positive Lookahead: /5(?=\d+)/

في هذا المثال، يتم تحديد الأرقام التي تأتي بعد الرقم 5 باستخدام (?=\d+) دون أن يتم تضمين الرقم 5 نفسه في النتيجة.

Non-Capturing Group (المجموعة الغير تلتقط):
تُستخدم Non-Capturing Group لتجميع النماذج معًا دون الحاجة إلى تخزين النتائج. بمعنى آخر، يتم استخدامها لتطبيق الخوارزمية على مجموعة من النماذج دون الحاجة إلى تخزين النتائج الفرعية. يبدأ Non-Capturing Group بـ (?:.

مثال على استخدام Non-Capturing Group:
فرضاً أن لدينا نص يحتوي على قائمة بالأسماء مفصولة بفواصل، ونريد استخراج أول حرف من كل اسم. في هذه الحالة، يمكن استخدام Non-Capturing Group لتطبيق التعبير العادي على كل اسم دون الحاجة إلى تخزين النتائج الفرعية.

التعبير العادي: /(\b\w)/g
التعبير باستخدام Non-Capturing Group: /(\b(?:\w))/g

في هذا المثال، يتم استخراج الحرف الأول من كل اسم باستخدام (?:\w) دون أن يتم تخزينه في النتائج الفرعية.

باختصار، على الرغم من أن كلاهما يستخدم لاستبعاد أجزاء من النص في النتيجة النهائية، إلا أن Positive Lookahead يُستخدم للتحقق من وجود نمط محدد بعد النمط الرئيسي، في حين يُستخدم Non-Capturing Group لتجميع النماذج دون الحاجة إلى تخزين النتائج الفرعية.

المزيد من المعلومات

بالطبع، سأواصل توضيح الفارق بين Positive Lookahead و Non-Capturing Group في JavaScript بشكل أكثر تفصيلًا وسأقدم مزيدًا من الأمثلة لتوضيح الاستخدام الفعلي لكل منهما.

Positive Lookahead (التحقق المتفائل):

يُستخدم Positive Lookahead للتحقق من وجود نمط معين بعد النمط الأساسي في النص، دون أن يؤثر ذلك في النتيجة النهائية. يبدأ Positive Lookahead بـ (?= ويتبعه النمط الذي نريد التحقق من وجوده.

مثال إضافي:
فرضاً أن لدينا سلسلة نصية تحتوي على قائمة من البريد الإلكتروني، ونريد فقط استخراج البريد الذي ينتهي بالمجال “.com”. يمكننا استخدام Positive Lookahead لتحديد البريد الإلكتروني الذي ينتهي بـ “.com” دون أن نشمل هذا الجزء في النتيجة.

التعبير: /[\w\.]+(?=\.com)/g
في هذا المثال، يتم استخدام Positive Lookahead (?=\.com) للتحقق من وجود “.com” بعد عنوان البريد الإلكتروني، دون أن يتم تضمين “.com” في النتيجة النهائية.

Non-Capturing Group (المجموعة الغير تلتقط):

تُستخدم Non-Capturing Group لتطبيق النمط على مجموعة من الأحرف دون الحاجة إلى تخزين النتائج الفرعية. يبدأ Non-Capturing Group بـ (?: ويتبعه النمط الذي نريد تطبيقه.

مثال إضافي:
فرضاً أن لدينا تاريخ مكتوب بتنسيق “YYYY-MM-DD”، ونريد فقط استخراج السنة والشهر دون اليوم. يمكن استخدام Non-Capturing Group لتطبيق التعبير العادي على السنة والشهر دون الحاجة إلى تخزين النتائج الفرعية.

التعبير: /(\d{4})-(?:\d{2})-(?:\d{2})/g
في هذا المثال، يتم استخدام Non-Capturing Group (?:\d{2}) لتطبيق التعبير العادي على الشهر واليوم دون تخزين النتائج الفرعية.

باختصار، يمكن استخدام Positive Lookahead للتحقق من وجود نمط محدد بعد النمط الأساسي دون تضمينه في النتيجة النهائية، بينما يُستخدم Non-Capturing Group لتطبيق النمط على مجموعة من الأحرف دون الحاجة إلى تخزين النتائج الفرعية.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر