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?

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);

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


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]}`;

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`);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.