ฉันจะแทนที่การจับคู่สตริงย่อย regex ใน Javascript ได้อย่างไร


111
var str   = 'asd-0.testing';
var regex = /asd-(\d)\.\w+/;

str.replace(regex, 1);

ที่มาแทนที่สตริงทั้งหมดที่มีstr 1ฉันต้องการให้มันแทนที่สตริงย่อยที่ตรงกันแทนที่จะเป็นสตริงทั้งหมด เป็นไปได้ใน Javascript หรือไม่?

คำตอบ:


140
var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;
str = str.replace(regex, "$11$2");
console.log(str);

หรือถ้าคุณแน่ใจว่าจะไม่มีตัวเลขอื่นในสตริง:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);

1
หรือใช้ฟังก์ชัน: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave

1
มีคำตอบใดบ้างที่คุณไม่ทราบโครงสร้างของนิพจน์ทั่วไป ที่นี่คุณกำลังสร้าง regex ใหม่โดยมีสองแมตช์
Martin Massera

เป็นเรื่องดีที่รู้ว่าคุณต้องใช้เครื่องหมายวงเล็บ () รอบ ๆ ส่วนที่คุณต้องการเป็น $ 1, $ 2 เป็นต้น
Bas Slagter

57

ใช้str.replace(regex, $1);:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

if (str.match(regex)) {
    str = str.replace(regex, "$1" + "1" + "$2");
}

แก้ไข: การปรับเปลี่ยนเกี่ยวกับความคิดเห็น


ฉันต้องการแทนที่สตริงย่อยด้วย '1' ไม่ใช่สตริงทั้งหมดด้วยสตริงย่อย
dave

24

ฉันจะได้ส่วนก่อนและหลังสิ่งที่คุณต้องการแทนที่และวางไว้ข้างใดข้างหนึ่ง

ชอบ:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

var matches = str.match(regex);

var result = matches[1] + "1" + matches[2];

// With ES6:
var result = `${matches[1]}1${matches[2]}`;

5
+1 โดยส่วนตัวแล้วฉันชอบที่จะมีคอลเลกชันของการแข่งขันที่น่าสนใจ
eduncan911

ฉันเห็นด้วยการมีชุดที่ตรงกันนั้นสามารถอ่านได้มากกว่าในความคิดของฉัน
Travis J

0

ฉันคิดว่าวิธีที่ง่ายที่สุดในการบรรลุเป้าหมายคือ:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.