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.