⊗jsSpRERMC 127 of 294 menu

คอลแบ็กในเมธอด replace ของ Regular Expressions ใน JavaScript

เมธอด replace สามารถรับพารามิเตอร์ตัวที่สองได้ไม่เพียงแค่สตริง แต่ยังรวมถึง ฟังก์ชันคอลแบ็ก ซึ่งจะถูกนำไปใช้กับทุกการค้นพบที่ตรงกัน แต่ละสตริงย่อยที่พบโดย regular expression จะถูกแทนที่ด้วยค่าที่ฟังก์ชันนี้คืนกลับมาสำหรับสตริงย่อยนั้นโดยเฉพาะ

สามารถส่งพารามิเตอร์เข้าไปในฟังก์ชันนี้ได้: พารามิเตอร์แรกจะได้รับสตริงที่พบ, พารามิเตอร์ที่สอง - กลุ่มจับ (กลุ่มแรก), พารามิเตอร์ที่สาม - กลุ่มจับที่สอง และต่อไปเรื่อยๆ - สามารถทำได้เท่าจำนวนกลุ่มจับที่มีใน regular expression

พารามิเตอร์รองสุดท้ายจะได้รับตำแหน่งของสตริงที่พบที่ตรงกัน และพารามิเตอร์สุดท้าย - สตริงทั้งหมดที่กำลังทำการค้นหา

เราจะมาดูกันว่ารายละเอียดทั้งหมดนี้ทำงานอย่างไรผ่านตัวอย่างภาคปฏิบัติ

ตัวอย่าง

กำหนดให้มีสตริงที่มีตัวเลข:

let str = '2 3 4 5';

ลองแทนที่ตัวเลขเหล่านี้ด้วยค่ากำลังสองของพวกมัน เริ่มต้นด้วยการลองแสดงตัวเลขของเราทีละตัวในคอนโซลภายในฟังก์ชันคอลแบ็ก:

str.replace(/\d+/g, function(match) { console.log(match); });

โค้ดของเราจะแสดง '2' ก่อน, หลังจากนั้น '3', '4' และ '5' นั่นคือในตัวแปร match จะได้รับสตริงที่พบโดย regular expression ตามลำดับ

มาแก้ไขโจทย์ให้เสร็จสิ้น - เราจะยกกำลัง match ด้วยสองและส่งคืนค่าด้วย return ผลลัพธ์คือ สำหรับเลขสองที่พบจะคืนค่า 4 และเลขสองจะถูกแทนที่ด้วยเลขสี่นี้, สำหรับเลขสามที่พบจะคืนค่า 9 และเลขสามจะถูกแทนที่ด้วยเลขเก้านี้ - และต่อไปเรื่อยๆ:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // แสดงผล '4 9 16 25'

ตัวอย่าง

ตอนนี้ให้มีในสตริงโครงสร้างรูปแบบ '2+3=':

let str = '2+3= 4+5= 6+7=';

ลองทำให้หลังจากเครื่องหมายเท่ากับมีผลบวกของตัวเลขที่เกี่ยวข้องแทรกอยู่ นั่นคือสตริงของเราควรกลายเป็นดังนี้:

'2+3=5 4+5=9 6+7=13'

เพื่อแก้ไขโจทย์ ลองทำการทดลองอีกครั้ง - กระจายตัวเลขตัวแรกและตัวที่สองออกเป็นกลุ่มจับแยกกัน:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

และตอนนี้มาแก้ไขโจทย์ให้เสร็จสิ้น: สำหรับแต่ละสตริงย่อยที่พบ ให้บวกรวมกลุ่มจับที่หนึ่งและที่สอง, นำกลุ่มจับที่ศูนย์ (สตริงที่พบ เช่น '2+3=') มาเพิ่มผลรวมเข้าไป และส่งคืนทั้งหมดนี้ผ่าน return:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

โจทย์ฝึกปฏิบัติ

กำหนดสตริง:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

ค้นหาตัวเลขที่อยู่ในวงเล็บและเพิ่มค่าของพวกมันเป็นสองเท่า นั่นคือจากสตริงของเราควรได้ผลลัพธ์ดังนี้:

'aaa [4] bbb [6] ccc [24] ddd'

กำหนดสตริง:

let str = '123 456 789';

ค้นหาตัวเลขทั้งหมดและกลับลำดับหลักของพวกมัน จากสตริงของเราควรได้ผลลัพธ์ดังนี้:

'321 654 987'

กำหนดสตริงที่มีวันที่:

let str = '31.12.2025 30.11.2024 29.10.2023';

ค้นหาวันที่ทั้งหมดและแปลงเป็นรูปแบบอื่น เพื่อให้ได้สตริงดังต่อไปนี้:

'2025-12-31 2024-11-30 2023-10-29'
ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ