ไวยากรณ์ของวิธีการแทนที่คือ: stringObj.replace(rgExp, แทนที่ข้อความ) โดยที่ stringObj เป็นสตริง (สตริง) reExp อาจเป็นออบเจ็กต์นิพจน์ทั่วไป (RegExp) หรือสตริง (สตริง) และแทนที่ข้อความเป็นการแทนที่สำหรับที่พบ สตริง - เพื่อช่วยให้ทุกคนเข้าใจดีขึ้น เราขอยกตัวอย่างง่ายๆ ด้านล่างนี้
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var stringObj="สาธารณรัฐประชาชนจงกู ประชาชนจงกู";
//แทนที่ตัวพิมพ์ผิด "Zhonggu" ด้วย "China"
//และส่งคืนอักขระใหม่ที่ถูกแทนที่
//ค่าของสตริงเดิม stringObj ไม่มีการเปลี่ยนแปลง
var newstr=stringObj.replace("จงกู", "จีน");
การแจ้งเตือน (ข่าว);
</สคริปต์>
"จงกู่" คือ "จีน"
มูลค่าของ
จีน");
หากคุณฉลาดกว่าฉัน หลังจากอ่านตัวอย่างข้างต้นแล้ว คุณจะพบว่าตัวพิมพ์ที่สอง "Zhonggu" ไม่ได้ถูกแทนที่ด้วย "China" เราสามารถดำเนินการวิธีการแทนที่รองเพื่อแทนที่ตัวพิมพ์ที่สอง "Zhonggu" ของโปรแกรมได้ ได้รับการปรับปรุงดังนี้
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var stringObj="สาธารณรัฐประชาชนจงกู ประชาชนจงกู";
//แทนที่ตัวพิมพ์ผิด "Zhonggu" ด้วย "China"
//และส่งคืนอักขระใหม่ที่ถูกแทนที่
//ค่าของสตริงเดิม stringObj ไม่มีการเปลี่ยนแปลง
var newstr=stringObj.replace("จงกู", "จีน");
newstr=newstr.replace("จงกู", "จีน");
การแจ้งเตือน (ข่าว);
</สคริปต์>
"จงกู่" คือ "จีน"
มูลค่าของ
จีน");
จีน");
เราสามารถคิดอย่างรอบคอบได้ หากมีการพิมพ์ผิดยกกำลัง N ถึง N เราควรดำเนินการด้วยวิธีแทนที่ N เป็น N เพื่อแทนที่การพิมพ์ผิดหรือไม่ - โอ้ อย่ากลัวเลย ด้วยนิพจน์ทั่วไป คุณไม่จำเป็นต้องดำเนินการแทนที่อีกครั้งหากพิมพ์ผิด - โค้ดหลังจากปรับปรุงโปรแกรมแล้วมีดังนี้
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var reg=new RegExp("久古", "g"); // สร้างวัตถุ RegExp ปกติ
var stringObj="สาธารณรัฐประชาชนจงกู ประชาชนจงกู";
var newstr=stringObj.replace(reg,"จีน");
การแจ้งเตือน (ข่าว);
</สคริปต์>
สร้างวัตถุ RegExp ปกติ
ข้างต้นเป็นการประยุกต์ใช้วิธีการแทนที่ที่ง่ายที่สุด ฉันสงสัยว่าคุณเข้าใจหรือไม่ - เริ่มต้นด้วยแอปพลิเคชันที่ซับซ้อนกว่านี้เล็กน้อย -
เมื่อค้นหาบทความในบางเว็บไซต์จะพบปรากฏการณ์นี้ คือ คำค้นหาจะถูกเน้นและเปลี่ยนสี? - สิ่งนี้สำเร็จได้อย่างไร? - ในความเป็นจริง เราสามารถใช้นิพจน์ทั่วไปเพื่อให้บรรลุผลดังกล่าวได้ โปรดดูโค้ดด้านล่างสำหรับหลักการง่ายๆ
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var str="สาธารณรัฐประชาชนจีน สาธารณรัฐประชาชนจีน";
var newstr=str.replace(/(人)/g,"<font color=red>$1</font>");
document.write(ข่าว);
</สคริปต์>
โปรแกรมข้างต้นขาดการโต้ตอบ มาปรับปรุงโปรแกรมเพื่อให้คุณสามารถป้อนอักขระที่คุณต้องการค้นหาได้อย่างอิสระ
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var s=prompt("กรุณากรอกตัวอักษรที่ต้องการค้นหา", "บุคคล");
var reg=new RegExp("("+s+")","g");
var str="สาธารณรัฐประชาชนจีน สาธารณรัฐประชาชนจีน";
var newstr=str.replace(reg,"<font color=red>$1</font>");
document.write(ข่าว);
</สคริปต์>
ประชากร");
บางทีทุกคนอาจไม่ค่อยเข้าใจว่าอักขระพิเศษ $1 หมายถึงอะไร จริงๆ แล้ว $1 แสดงถึงอักขระในวงเล็บในนิพจน์ทางด้านซ้าย นั่นคือการจับคู่ย่อยครั้งแรก ในทำนองเดียวกัน $2 แสดงถึงการจับคู่ย่อยครั้งที่สอง - การแข่งขันย่อยคืออะไร? - ในแง่ของคนธรรมดา แต่ละวงเล็บทางด้านซ้ายคือการจับคู่คำแรก และวงเล็บที่สองคือการจับคู่ย่อยที่สอง -
เมื่อเราต้องการดำเนินการกับตัวละครที่พบจะต้องปฏิบัติอย่างไร? - ก่อนที่จะนำไปใช้ ก่อนอื่นเรามาพูดถึงวิธีรับพารามิเตอร์ของฟังก์ชันบางตัวกันก่อน - ภายในฟังก์ชันมีการรวบรวมอาร์กิวเมนต์ คอลเลกชันนี้เก็บพารามิเตอร์ทั้งหมดของฟังก์ชันปัจจุบันสามารถรับได้ผ่านทางอาร์กิวเมนต์ เพื่อความเข้าใจของคุณ โปรดดูโค้ดต่อไปนี้
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
ทดสอบฟังก์ชัน(){
alert("จำนวนพารามิเตอร์:"+arguments.length);
alert("ค่าของแต่ละพารามิเตอร์: "+อาร์กิวเมนต์[0]);
alert("ค่าของพารามิเตอร์ตัวที่สอง"+อาร์กิวเมนต์[1]);
//คุณสามารถใช้ for loop เพื่ออ่านพารามิเตอร์ทั้งหมดได้
-
ทดสอบ("aa", "bb", "ซีซี");
</สคริปต์>
เตือน("
เตือน("
เตือน("
//วนรอบเพื่ออ่านพารามิเตอร์ทั้งหมด
หลังจากทำความเข้าใจโปรแกรมข้างต้นแล้ว เรามาดูโปรแกรมที่น่าสนใจดังต่อไปนี้กัน
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var reg=new RegExp("//d", "g");
var str="abd1afa4sdf";
str.replace(reg,function(){alert(arguments.length);});
</สคริปต์>
เราประหลาดใจที่พบว่าฟังก์ชันที่ไม่ระบุชื่อถูกดำเนินการสองครั้ง และมีพารามิเตอร์สามตัวในฟังก์ชัน - นี่เป็นเรื่องง่ายที่จะคิด เนื่องจากนิพจน์ทั่วไปที่เราเขียนตรงกับตัวเลขตัวเดียว และสตริงที่ตรวจพบมีตัวเลขสองตัว ดังนั้นฟังก์ชันที่ไม่ระบุตัวตนจึงถูกดำเนินการสองครั้ง - พารามิเตอร์สามตัวภายในฟังก์ชันที่ไม่ระบุตัวตนคืออะไร? - เพื่อชี้แจงปัญหานี้ ลองดูที่รหัสต่อไปนี้
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
ทดสอบฟังก์ชัน(){
สำหรับ(var i=0;i<arguments.length;i++){
alert("ค่าของพารามิเตอร์ "+(i+1)+"th: "+อาร์กิวเมนต์[i]);
-
-
var reg=new RegExp("//d", "g");
var str="abd1afa4sdf";
str.replace(reg,ทดสอบ);
</สคริปต์>
สำหรับ(var i=0;i<arguments.length;i++){
alert("ค่าของพารามิเตอร์: "+อาร์กิวเมนต์[i]);
-
หลังจากการสังเกต เราพบว่าพารามิเตอร์แรกแสดงถึงอักขระที่ตรงกัน พารามิเตอร์ที่สองแสดงถึงตำแหน่งดัชนีขั้นต่ำของอักขระเมื่อจับคู่ (RegExp.index) และพารามิเตอร์ที่สามแสดงถึงสตริงที่ตรงกัน (RegExp.input) ในความเป็นจริง จำนวนของพารามิเตอร์เหล่านี้จะเพิ่มขึ้นเมื่อจำนวนการจับคู่ย่อยเพิ่มขึ้น หลังจากชี้แจงประเด็นเหล่านี้แล้ว เราสามารถใช้วิธีเขียนแบบอื่นได้
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
ทดสอบฟังก์ชัน($1){
กลับ "<font color='red'>"+$1+"</font>"
-
var s=prompt("กรุณากรอกตัวอักษรที่ต้องการค้นหา", "บุคคล");
var reg=new RegExp("("+s+")","g");
var str="สาธารณรัฐประชาชนจีน สาธารณรัฐประชาชนจีน";
var newstr=str.replace(reg,ทดสอบ);
document.write(ข่าว);
</สคริปต์>
กลับ "<font color='red'>"+$1+"</font>"
ประชากร");
หลังจากอ่านโปรแกรมข้างต้นแล้ว ปรากฎว่าคุณสามารถทำอะไรก็ได้ที่คุณต้องการด้วยอักขระที่ตรงกัน นี่คือตัวอย่างการใช้งานง่ายๆ:
รหัสเจส
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์ = "จาวาสคริปต์">
var str="เขาอายุ 22 ปี เธออายุ 20 ปี พ่อของเขาอายุ 45 ปี และพ่อของเธออายุ 44 ปี มีทั้งหมด 4 คน"
ทดสอบฟังก์ชัน($1){
var gyear=(วันที่ใหม่()).getYear()-parseInt($1)+1;
ส่งคืน $1+"("+gyear+"ปีเกิด)";
-
var reg=new RegExp("(//d+)ปีเก่า", "g");
var newstr=str.replace(reg,ทดสอบ);
การแจ้งเตือน (str);
การแจ้งเตือน (ข่าว);
</สคริปต์>