Bagaimana cara mengganti substring regex yang cocok di Javascript?

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

str.replace(regex, 1);

Itu menggantikan seluruh string strdengan 1. Saya ingin mengganti substring yang cocok, bukan seluruh string. Apakah ini mungkin dalam Javascript?

dave
sumber

Jawaban:

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

Atau jika Anda yakin tidak akan ada digit lain dalam string:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);
Amarghosh
sumber
1
atau menggunakan fungsi: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave
1
apakah ada jawaban di mana Anda TIDAK tahu struktur regex? di sini Anda pada dasarnya membuat regex baru dengan dua kecocokan
Martin Massera
Senang rasanya mengetahui bahwa Anda memerlukan kawat gigi () di sekitar bagian yang Anda inginkan seperti $ 1, $ 2 dll.
Bas Slagter
57

menggunakan 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");
}

Sunting: adaptasi tentang komentar


sumber
Saya ingin mengganti substring dengan '1' bukan seluruh string dengan substring
dave
24

Saya akan mendapatkan bagian sebelum dan sesudah apa yang ingin Anda ganti dan meletakkannya di kedua sisi.

Suka:

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]}`;
Félix Saparelli
sumber
5
+1 Saya pribadi suka memiliki koleksi pertandingan untuk dibongkar.
eduncan911
Saya setuju, memiliki set yang cocok tersedia lebih mudah dibaca menurut saya.
Travis J
0

Saya pikir cara termudah untuk mencapai tujuan Anda adalah ini:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Lantanios
sumber