RegExp.prototype.exec()‎

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

الدالة RegExp.prototype.exec()‎ تجرى بحثًا عن مطابقة للتعبير النمطي في السلسلة النصية المُحدَّدة، وتُعيد مصفوفة النتائج، أو القيمة null.

إذا كانتَ تريد تنفيذ البحث لمعرفة إن كانت القيمة موجودةً أم لا فاستخدام الدالة RegExp.prototype.test()‎ أو الدالة String.prototype.search()‎.

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

regexObj.exec(str)

str

السلسلة النصية التي سنبحث عن مُطابَقة للتعبير النمطي فيها.

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

إذا نجحت عملية المطابقة، فستُعيد الدالة exec()‎ مصفوفةً وتُحدِّث خاصيات كائن التعابير النمطية. المصفوفة المعادة ستحتوي على النص المُطابَق في أوّل عنصر فيها، ثم العناصر التي تليه ستحتوي على الأنماط الفرعية التي جرت مطابقتها في النص.

إذا لم تنجح عملية المطابقة، فستُعيد الدالة exec()‎ القيمة null.

الوصف

سنشرح كيف تعمل هذه الدالة بإعطاء مثال، لاحظ أنَّنا استخدمنا الرايتين g (أي global) و i (أي ignoreCase):

var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');

الجدول الآتي يُوضِّح نتائج السكربت السابق:

الكائن الخاصية أو الفهرس الوصف مثال
result [0] السلسلة النصية التي جرت مُطابَقَتُها Quick Brown Fox Jumps
‎[1], ...[n]‎ السلاسل النصية الفرعية التي تمت مطابقتها من الأنماط الموجودة بين قوسين (إن كانت متوافرة). ‎[1] = Brown

‎[2] = Jumps

index فهرس بداية المُطابَقة في السلسلة النصية، ويبدأ العد من الفهرس 0. 4
input السلسلة النصية الأصلية. The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex الفهرس الذي ستبدأ عنده عملية البحث عن المطابقة التالية. وإذا لم تكن الراية "g" مضبوطةً فستبقى قيمته مساويةً للصفر. 25
ignoreCase تحديد إن كانت الراية "i" (التي تُستخدَم لتجاهل حالة الأحرف) مضبوطةً أم لا. true
global تحديد إن كانت الراية "g" (التي تُستخدَم لإيجاد جميع المطابقات في السلسلة النصية) مضبوطةً أم لا. true
multiline تحديد إن كانت الراية "m" (التي تُستخدَم لجعل المطابقة تجري سطرًا بسطر) مضبوطةً أم لا. false
source النص المصدري للتعبير النمطي quick\s(brown).+?(jumps)‎

أمثلة

العثور على المطابقات التالية

إذا كانت الراية "g" مضبوطةً في التعبير النمطي الذي تستخدمه، فيمكنك استعمال الدالة exec()‎ عدِّة مرات للعثور على جميع المطابقات في السلسلة النصية، وعندما تفعل ذلك، فسيبدأ البحث بدءًا من الفهرس المُشار إليه عبر الخاصية lastIndex:

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = 'Found ' + myArray[0] + '. ';
  msg += 'Next match starts at ' + myRe.lastIndex;
  console.log(msg);
}

سيعرض المثال السابق الناتج الآتي:

Found abb. Next match starts at 3
Found ab. Next match starts at 9

ملاحظة: لا تضع التعبير النمطي (بالشكل المختصر أو عبر استخدام الدالة البانية RegExp) ضمن حلقة التكرار while وإلا فستُنشَأ حلقة تكرار لا نهائية وذلك لأنَّ الخاصية lastIndex سيُعاد ضبطها في كل تكرار، واحرص أيضًا على ضبط الراية "g" وإلا فستحدث حلقة تكرار لا نهائية أيضًا.

استخدام الدالة exec()‎ مع الشكل المختصر للتعابير النمطية

يمكنك أيضًا استخدام الدالة exec()‎ دون استخدام الدالة البانية RegExp:

var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]); // "hello world!"

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

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

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