Javascript แทนที่ด้วยการอ้างอิงถึงกลุ่มที่ตรงกันหรือไม่


228

hello _there_ฉันมีสตริงเช่น ฉันต้องการที่จะแทนที่ทั้งสองขีดด้วย<div>และ</div>ตามลำดับโดยใช้JavaScript เอาท์พุทจะ (จึง) hello <div>there</div>มีลักษณะเหมือน สตริงอาจมีเครื่องหมายขีดล่างหลายคู่

สิ่งที่ฉันกำลังมองหาวิธีการอย่างใดอย่างหนึ่งเรียกใช้ฟังก์ชั่นในการแข่งขันแต่ละวิธีทับทิมไม่ว่าจะเป็น:

"hello _there_".gsub(/_.*?_/) { |m| "<div>" + m[1..-2] + "</div>" }

หรือสามารถอ้างอิงกลุ่มที่ตรงกันได้อีกวิธีที่สามารถทำได้ในทับทิม:

"hello _there_".gsub(/_(.*?)_/, "<div>\\1</div>")

ความคิดหรือข้อเสนอแนะ?

คำตอบ:


384
"hello _there_".replace(/_(.*?)_/, function(a, b){
    return '<div>' + b + '</div>';
})

โอ้หรือคุณสามารถ:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")

10
Javascript ใช้$1แทน\1หรือไม่ ใครบางคนจะให้ลิงค์ไปยังเอกสาร?
daveloyall

3
replacementValueสามารถเป็นฟังก์ชั่นและมันถูกส่งผ่านข้อโต้แย้งที่แตกต่างกันขึ้นอยู่กับกลุ่มจับ? ! ที่น่าตื่นตาตื่นใจ
daveloyall

4
ฉันพบ \ 1 ทำงานได้ แต่ $ 1 ไม่ถึงแม้ว่าฉันกำลังใช้รูปแบบ RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
......

1
@CalculatorFeline การพูดว่า "ตัว regex เอง" ไม่ได้ระบุอันใดอันหนึ่งเนื่องจากอาจมีคนพยายามใช้ regex สำหรับการแทนที่ ต้องมีหลายคนที่พยายามทำสิ่งนี้: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
สจ๊วต

2
เอกสารเกี่ยวกับฟังก์ชั่นแทนที่developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
......


7

$สำหรับสตริงทดแทนและรูปแบบการเปลี่ยนตามที่ระบุโดย ที่นี่ประวัติย่อ:

ป้อนคำอธิบายรูปภาพที่นี่

ลิงก์ไปยัง doc: ที่นี่

"hello _there_".replace(/_(.*?)_/g, "<div>$1</div>")



บันทึก:

หากคุณต้องการที่จะมีในการใช้งานแทนที่สตริง$ $$เหมือนกับ vscode snippet system

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.