String.prototype.indexOf()
الدالة String.prototype.indexOf()
تُعيد الفهرس الموجود ضمن كائن String
الذي يستدعي الدالة والذي يكون موضع أوّل مُطابَقة للقيمة المُحدَّدة لهذه الدالة بدءًا من fromIndex
، أو القيمة -1
إن لم يُعثَر عليها.
البنية العامة
str.indexOf(searchValue[, fromIndex])
searchValue
السلاسل النصية التي نريد البحث عنها ومعرفة فهرسها.
fromIndex
قيمة اختيارية، وهي عددٌ صحيحٌ يُمثِّل الفهرس الذي سيبدأ البحث منه، والقيمة الافتراضية هي 0
. إذا كانت قيمة fromIndex
أقل من 0
أو أكبر من str.length
، فسيبدأ البحث عند الفهرس 0
أو str.length
على التوالي وبالترتيب.
القيمة المعادة
فهرس موضع أوّل مطابَقة للسلسلة النصية searchValue
، أو القيمة -1
إن لم يُعثَر عليها.
الوصف
تُرقَّم المحارف من بداية السلسلة النصية (أي من اليسار إلى اليمين في لغات LTR مثل الإنكليزية، ومن اليمين إلى اليسار في لغات RTL مثل العربية)، ويكون فهرس أوّل محرف هو 0
، ومحرف آخر عنصر هو str.length -1
.
'Blue Whale'.indexOf('Blue'); // 0
'Blue Whale'.indexOf('Blute'); // -1
'Blue Whale'.indexOf('Whale', 0); // 5
'Blue Whale'.indexOf('Whale', 5); // 5
'Blue Whale'.indexOf('Whale', 7); // -1
'Blue Whale'.indexOf(''); // 0
'Blue Whale'.indexOf('', 9); // 9
'Blue Whale'.indexOf('', 10); // 10
'Blue Whale'.indexOf('', 11); // 10
لاحظ أنَّ الدالة indexOf()
حساسةٌ لحالة الأحرف، أي أنَّ التعبير الآتي سيُعيد القيمة -1
:
'Blue Whale'.indexOf('blue'); // -1
التحقق من وجود سلسلة نصية
لاحظ أنَّ القيمة 0 لا تتحوّل إلى true
والقيمة -1 لن تتحول إلى false
؛ وبالتالي إذا أردنا التحقق من وجود سلسلة نصية داخل سلسلة نصية أخرى، فعلينا كتابة الشيفرة الآتية:
'Blue Whale'.indexOf('Blue') !== -1; // true
'Blue Whale'.indexOf('Bloe') !== -1; // false
انظر إلى الدالة String.prototype.includes()
، فهي تعمل نفس عمل الشيفرة السابقة، لكنها أُضيفَت إلى معيار ECMAScript 2015.
أمثلة
استخدام indexOf()
و lastIndexOf()
المثال الآتي يوظِّف الدالتين indexOf()
و lastIndexOf()
لتحديد مواضع القيم في السلسلة النصية "Brave new world"
:
var anyString = 'Brave new world';
console.log('The index of the first w from the beginning is ' + anyString.indexOf('w'));
// 8
console.log('The index of the last w from the beginning is ' + anyString.lastIndexOf('w'));
// 10
console.log('The index of "new" from the beginning is ' + anyString.indexOf('new'));
// 6
console.log('The index of "new" from the end is ' + anyString.lastIndexOf('new'));
// 6
حساسية حالة الأحرف
المثال الآتي يُعرِّف سلسلتين نصيتين، اللتان تحتويا على العبارة نفسها لكن مع بعض الاختلافات بحالة الأحرف. لاحظ من الناتج أنَّ الدالة indexOf()
حساسة لحالة الأحرف:
var myString = 'brie, pepper jack, cheddar';
var myCapString = 'Brie, Pepper Jack, Cheddar';
console.log('myString.indexOf("cheddar") is ' + myString.indexOf('cheddar'));
// 19
console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf('cheddar'));
// -1
إحصاء عدد مرات تكرار أحد المحارف
يمكننا استخدام الدالة indexOf()
لمعرفة كم مرّة تكرر المحرف في السلسلة النصية، وذلك بإنشاء متغير باسم count
الذي يحتوي على عدد مرات تكرار المحرف e
في السلسلة النصية str
، وباستخدام المعامل fromIndex
:
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');
while (pos !== -1) {
count++;
pos = str.indexOf('e', pos + 1);
}
console.log(count); // 4
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .