بناء جملة طريقة الاستبدال هو: stringObj.replace(rgExp, ReplaceText) حيث تكون stringObj عبارة عن سلسلة (سلسلة)، ويمكن أن يكون reExp كائن تعبير عادي (RegExp) أو سلسلة (سلسلة)، وreplaceText هو بديل للكائن الذي تم العثور عليه. خيط. . . من أجل مساعدة الجميع على فهم أفضل، دعونا نعطي مثالا بسيطا أدناه.
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var stringObj="جمهورية تشونغغو الشعبية، شعب تشونغغو";
// استبدل الخطأ المطبعي "Zhonggu" بـ "China"
// وأرجع الشخصية الجديدة المستبدلة
// لم تتغير قيمة السلسلة الأصلية stringObj
var newstr=stringObj.replace("Zhonggu"،"China")؛
تنبيه(newstr);
</script>
"Zhonggu" هي "الصين"
قيمة
الصين")؛
إذا كنت أكثر ذكاءً مني، فبعد قراءة المثال أعلاه، ستجد أن الخطأ المطبعي الثاني "Zhonggu" لم يتم استبداله بـ "China". يمكننا تنفيذ طريقة الاستبدال الثانوي لاستبدال الخطأ المطبعي الثاني "Zhonggu" في البرنامج تم تحسينه على النحو التالي:
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var stringObj="جمهورية تشونغغو الشعبية، شعب تشونغغو";
// استبدل الخطأ المطبعي "Zhonggu" بـ "China"
// وأرجع الشخصية الجديدة المستبدلة
// لم تتغير قيمة السلسلة الأصلية stringObj
var newstr=stringObj.replace("Zhonggu"،"China")؛
newstr=newstr.replace("Zhonggu"،"China")؛
تنبيه(newstr);
</script>
"Zhonggu" هي "الصين"
قيمة
الصين")؛
الصين")؛
يمكننا التفكير في الأمر بعناية. إذا كانت هناك أخطاء مطبعية في قوة N إلى N، فهل يجب علينا أيضًا تنفيذ طريقة استبدال القوة N إلى N لاستبدال الأخطاء المطبعية؟ ؟ أوه، لا تخف، مع التعبير العادي، لا يتعين عليك تنفيذ طريقة الاستبدال مرة واحدة بسبب الخطأ المطبعي. . الكود بعد تحسين البرنامج هو كما يلي
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var reg=new RegExp("久古"،"g"); // إنشاء كائن RegExp عادي
var stringObj="جمهورية تشونغغو الشعبية، شعب تشونغغو";
var newstr=stringObj.replace(reg,"China");
تنبيه(newstr);
</script>
قم بإنشاء كائن RegExp عادي
ما ورد أعلاه هو أبسط تطبيق لطريقة الاستبدال، وأتساءل عما إذا كنت تفهمه؟ ؟ لنبدأ بتطبيق أكثر تعقيدًا بعض الشيء. .
عند قيامك بالبحث عن المقالات في بعض المواقع ستجد هذه الظاهرة، أي سيتم إبراز كلمات البحث الأساسية وتغيير لونها؟ ؟ كيف يتم تحقيق ذلك؟ ؟ في الواقع، يمكننا استخدام التعبيرات العادية لتحقيق ذلك. يرجى الاطلاع على الكود أدناه لمعرفة المبدأ البسيط
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var str="جمهورية الصين الشعبية، جمهورية الصين الشعبية";
var newstr=str.replace(/(人)/g,"<font color=red>$1</font>");
document.write(newstr);
</script>
يفتقر البرنامج أعلاه إلى التفاعلية، فلنعمل على تحسين البرنامج حتى تتمكن من إدخال الأحرف التي تريد العثور عليها بشكل مستقل.
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var s=prompt("الرجاء إدخال الأحرف التي تبحث عنها"، "person");
var reg=new RegExp("("+s+")"،"g");
var str="جمهورية الصين الشعبية، جمهورية الصين الشعبية";
var newstr=str.replace(reg,"<font color=red>$1</font>");
document.write(newstr);
</script>
الناس")؛
ربما لا يفهم الجميع تمامًا ما يعنيه الحرف الخاص $1، في الواقع، $1 يمثل الأحرف الموجودة بين قوسين في التعبير الموجود على اليسار، أي التطابق الفرعي الأول، وبنفس الطريقة، يمثل $2 التطابق الفرعي الثاني. . ما هي المباراة الفرعية؟ ؟ في مصطلحات الشخص العادي، كل قوس على اليسار هو أول مطابقة للكلمة، والقوس الثاني هو المباراة الفرعية الثانية. .
عندما نريد إجراء عمليات على الأحرف التي تم العثور عليها، كيف ننفذها؟ ؟ قبل تنفيذها، دعونا نتحدث أولاً عن كيفية الحصول على معلمات دالة معينة. . يوجد داخل الوظيفة مجموعة من الوسائط. تخزن هذه المجموعة كافة معلمات الوظيفة الحالية، ويمكن الحصول عليها من خلال الوسائط.
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
اختبار الوظيفة (){
تنبيه("عدد المعلمات:"+arguments.length);
تنبيه("قيمة كل معلمة:"+arguments[0]);
تنبيه("قيمة المعلمة الثانية"+arguments[1]);
// يمكنك استخدام حلقة for لقراءة جميع المعلمات
}
اختبار ("aa"، "bb"، "CC")؛
</script>
يُحذًِر("
يُحذًِر("
يُحذًِر("
// حلقة لقراءة جميع المعلمات
بعد فهم البرنامج أعلاه، دعونا نلقي نظرة على البرنامج المثير للاهتمام التالي
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var reg=new RegExp("//d"،"g");
فار str="abd1afa4sdf";
str.replace(reg,function(){alert(arguments.length);});
</script>
لقد فوجئنا بأن الوظيفة المجهولة تم تنفيذها مرتين، وكان هناك ثلاث معلمات في الوظيفة، لماذا تم تنفيذها مرتين؟ ؟ من السهل التفكير في هذا، لأن التعبير العادي الذي كتبناه يتطابق مع رقم واحد، والسلسلة التي يتم اكتشافها تحتوي على رقمين، لذلك يتم تنفيذ الوظيفة المجهولة مرتين. . ما هي المعلمات الثلاثة داخل الوظيفة المجهولة؟ ؟ لتوضيح هذه المشكلة، دعونا نلقي نظرة على الكود التالي.
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
اختبار الوظيفة (){
for(var i=0;i<arguments.length;i++){
تنبيه("قيمة المعلمة "+(i+1)+"th: "+arguments[i]);
}
}
var reg=new RegExp("//d"،"g");
فار str="abd1afa4sdf";
str.replace(reg,test);
</script>
for(var i=0;i<arguments.length;i++){
تنبيه("قيم المعلمات:"+arguments[i]);
}
وبعد الملاحظة وجدنا أن المعلمة الأولى تمثل الحرف المطابق، والمعلمة الثانية تمثل الحد الأدنى لموضع الفهرس للحرف عند المطابقة (RegExp.index)، والمعلمة الثالثة تمثل السلسلة المتطابقة (RegExp.input). في الواقع، سيزداد عدد هذه المعلمات مع زيادة عدد المطابقات الفرعية. وبعد توضيح هذه المسائل، يمكننا استخدام طريقة أخرى للكتابة
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
اختبار الوظيفة($1){
إرجاع "<font color='red'>"+$1+"</font>"
}
var s=prompt("الرجاء إدخال الأحرف التي تبحث عنها"، "person");
var reg=new RegExp("("+s+")"،"g");
var str="جمهورية الصين الشعبية، جمهورية الصين الشعبية";
var newstr=str.replace(reg,test);
document.write(newstr);
</script>
إرجاع "<font color='red'>"+$1+"</font>"
الناس")؛
بعد قراءة البرنامج أعلاه، اتضح أنه يمكنك فعل ما تريد بالأحرف المطابقة. فيما يلي مثال تطبيقي بسيط:
كود جي إس
انسخ رمز الكود كما يلي:
<لغة البرمجة = "جافا سكريبت">
var str="عمره 22 سنة، وعمرها 20 سنة، وعمر والده 45 سنة، وعمر والدها 44 سنة، هناك 4 أشخاص في المجمل"
اختبار الوظيفة($1){
var gyear=(new Date()).getYear()-parseInt($1)+1;
return $1+"("+gyear+"سنة الميلاد)";
}
var reg=new RegExp("(//d+)years old"،"g");
var newstr=str.replace(reg,test);
تنبيه (شارع)؛
تنبيه(newstr);
</script>