من الواضح أن المشكلة تكمن في كيفية استخدام الدالة substr
في جافا سكريبت. الدالة substr
تأخذ معاملين: الفهرس البدئي للبداية وطول النص المراد استخراجه. في حين أنك تستخدم contents.indexOf("!",lastPosition+1)
كطول النص المراد استخراجه، فإنها تعود بالفعل بالفهرس الأول للعلامة التالية “!”. لكن substr
تتوقع طول النص المراد استخراجه، وليس الفهرس النهائي للعلامة التالية.
لحل هذه المشكلة، يمكنك استخدام الفهرس البدئي من indexOf
وطول النص الذي تحتاج إلى استخراجه. هناك طريقتان لتحقيق ذلك، إما بحساب الطول بطريقة منفصلة أو باستخدام indexOf
للعثور على الفهرس النهائي للعلامة التالية ومن ثم حساب الفارق بين الفهرسين.
لتوضيح، يمكنك تغيير السطر الذي يحتوي substr
إلى:
javascriptconsole.log(contents.substr(lastPosition+1, contents.indexOf("!", lastPosition+1) - (lastPosition + 1)));
بهذا التعديل، سيتم استخراج النص بشكل صحيح بدلاً من الحصول على فهرس العلامة الثالثة “!” كطول للنص المراد استخراجه.
المزيد من المعلومات
تأكد من أن متغير contents
يحتوي على البيانات الصحيحة التي تريد تحليلها. قد تحتاج إلى فحص قيمة contents
للتأكد من أنها تمثل البيانات الصحيحة. قد يكون من المفيد أيضًا استخدام دوال تفحص البيانات بشكل أفضل، مثل includes
بدلاً من indexOf
للتحقق من وجود العلامة المطلوبة.
علاوة على ذلك، يمكنك تحسين كفاءة الكود بتخزين نتائج indexOf
في متغيرات مؤقتة بدلاً من استدعاء الدالة مرارًا وتكرارًا، وهذا يمكن أن يزيد من قابلية فهم الكود وأدائه.
وأخيرًا، يمكنك استخدام تعبيرات منطقية مباشرة لتحقق من حدوث العلامة المطلوبة بدلاً من استخدام حلقة while
، مما يمكن أن يجعل الكود أقل تعقيدًا وأسهل فهمًا.