Làm cách nào để thay thế kết hợp chuỗi con regex trong Javascript?


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

str.replace(regex, 1);

Điều đó thay thế toàn bộ chuỗi strbằng 1. Tôi muốn nó thay thế chuỗi con phù hợp thay vì toàn bộ chuỗi. Điều này có khả thi trong Javascript không?

Câu trả lời:


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

Hoặc nếu bạn chắc chắn sẽ không có bất kỳ chữ số nào khác trong chuỗi:

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

1
hoặc sử dụng hàm: 'asd-0.testing'.replace (/ (asd -) \ d (\. \ w +) /, function (mystring, arg1, arg2) {return arg1 +' mynumber '+ arg2})
Ivan Rave

1
có câu trả lời nào mà bạn KHÔNG biết cấu trúc của regex không? ở đây về cơ bản bạn đang tạo một regex mới với hai trận đấu
Martin Massera

Nó là tốt để biết rằng bạn cần niềng răng () xung quanh phần bạn muốn như $ 1, $ 2 vv
Bas Slagter

57

sử dụng 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");
}

Chỉnh sửa: chuyển thể liên quan đến bình luận


Tôi muốn thay thế chuỗi con bằng '1' chứ không phải toàn bộ chuỗi bằng chuỗi con
dave

24

Tôi sẽ lấy một phần trước và sau những gì bạn muốn thay thế và đặt chúng ở hai bên.

Giống:

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 Cá nhân tôi thích có bộ sưu tập các trận đấu để đánh nhau.
eduncan911

Tôi đồng ý, theo ý kiến ​​của tôi, có sẵn bộ phù hợp thì dễ đọc hơn.
Travis J

0

Tôi nghĩ cách đơn giản nhất để đạt được mục tiêu của bạn là:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.