Javascript'te bir normal ifade alt dize eşleşmesini nasıl değiştirebilirim?


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

str.replace(regex, 1);

Bu, tüm dizeyi strile değiştirir 1. Tüm dize yerine eşleşen alt dizeyi değiştirmesini istiyorum. Bu Javascript'te mümkün mü?

Yanıtlar:


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

Veya dizede başka rakam olmayacağından eminseniz:

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

1
veya şu işlevi kullanarak: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Övgü

1
Normal ifadenin yapısını bilmediğin herhangi bir yanıt var mı? burada temelde iki eşleşmeli yeni bir normal ifade oluşturuyorsunuz
Martin Massera

Size vb $ 1, $ 2 olarak istediğiniz parçanın etrafına parantez () gerektiğini bilmek iyidir
Bas Slagter

57

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

Düzenleme: yoruma ilişkin uyarlama


Alt dizeyi, dizenin tamamını alt dizeyle değil '1' ile değiştirmek istiyorum
dave

24

Parçayı değiştirmek istediğinizden önce ve sonra alır ve her iki tarafa da koyardım.

Sevmek:

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 Ben şahsen kibrit koleksiyonuna sahip olmayı seviyorum.
eduncan911

Kabul ediyorum, eşleşen setin mevcut olması bence daha okunabilir.
Travis J

0

Bence hedefinize ulaşmanın en basit yolu şudur:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.