JavaScript มีreplace()
วิธีการของวัตถุ String สำหรับการแทนที่สารตั้งต้น วิธีนี้สามารถมีสองข้อโต้แย้ง อาร์กิวเมนต์แรกสามารถเป็นสตริงหรือรูปแบบการแสดงออกปกติ (วัตถุ regExp) และอาร์กิวเมนต์ที่สองสามารถเป็นสตริงหรือฟังก์ชั่น ตัวอย่างของreplace()
วิธีการที่มีทั้งอาร์กิวเมนต์สตริงแสดงอยู่ด้านล่าง
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text) //ten, two, three, one, five, one
โปรดทราบว่าหากอาร์กิวเมนต์แรกคือสตริงเฉพาะการเกิดครั้งแรกของสตริงย่อยจะถูกแทนที่เช่นเดียวกับในตัวอย่างข้างต้น ในการแทนที่สตริงย่อยที่เกิดขึ้นทั้งหมดคุณต้องระบุนิพจน์ทั่วไปด้วยg
แฟล็ก (global) หากคุณไม่ได้ระบุค่าสถานะโกลบอลเฉพาะการเกิดขึ้นครั้งแรกของสตริงย่อยจะถูกแทนที่แม้ว่าคุณจะให้นิพจน์ทั่วไปเป็นอาร์กิวเมนต์แรกก็ตาม ดังนั้นลองมาแทนที่เหตุการณ์ทั้งหมดone
ในตัวอย่างข้างต้น
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text) //ten, two, three, ten, five, ten
โปรดทราบว่าคุณไม่ได้ห่อรูปแบบการแสดงออกปกติในเครื่องหมายคำพูดซึ่งจะทำให้มันเป็นสตริงไม่ใช่วัตถุ regExp หากต้องการทำการเปลี่ยนแบบคำนึงถึงขนาดตัวพิมพ์คุณต้องระบุแฟล็กเพิ่มเติมi
ซึ่งทำให้รูปแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ /one/gi
ในกรณีที่การแสดงออกปกติดังกล่าวข้างต้นจะเป็น สังเกตเห็นการi
ตั้งค่าสถานะที่นี่
หากอาร์กิวเมนต์ที่สองมีฟังก์ชั่นและหากมีการจับคู่ฟังก์ชั่นจะถูกส่งผ่านด้วยสามข้อโต้แย้ง ข้อโต้แย้งที่ฟังก์ชั่นได้รับคือการแข่งขันตำแหน่งของการแข่งขันและข้อความต้นฉบับ คุณต้องคืนสิ่งที่ควรจะแทนที่ด้วย ตัวอย่างเช่น,
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten
คุณสามารถควบคุมข้อความแทนที่ได้มากขึ้นโดยใช้ฟังก์ชั่นเป็นอาร์กิวเมนต์ที่สอง
str_replace
ยังยอมรับสองอาร์เรย์ที่มีความยาวเท่ากันโดยที่แต่ละสตริงในอาร์เรย์แรกจะถูกแทนที่ด้วยสตริงในอาร์เรย์ที่สองที่ดัชนีเดียวกัน โปรดดูstackoverflow.com/a/5069776/296430สำหรับฟังก์ชั่นที่ถูกต้องเท่านั้นที่ฉันได้พบจนถึงตอนนี้ที่เลียนแบบพฤติกรรมที่แน่นอนในจาวาสคริปต์