Javascriptで正規表現の部分文字列の一致をどのように置き換えることができますか?


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

str.replace(regex, 1);

これにより、文字列全体がに置き換えstrられ1ます。文字列全体ではなく、一致した部分文字列を置き換える必要があります。これはJavaScriptで可能ですか?

回答:


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

または、文字列に他の数字が含まれないことが確実な場合:

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

1
またはfunctionを使用: 'asd-0.testing'.replace(/(asd-)\ d(\。\ w +)/、function(mystring、arg1、arg2){return arg1 +' mynumber '+ arg2})
Ivanレイブ

1
あなたが正規表現の構造を知らない答えはありますか?ここでは、基本的に2つの一致を持つ新しい正規表現を作成しています
Martin Massera

あなたが$ 1、$ 2等としたい部分の周りにカッコ()必要があることを知って良いです
バSlagter

57

を使用して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");
}

編集:コメントに関する適応


部分文字列全体ではなく部分文字列を「1」に置き換えたい
dave

24

交換したいものの前と後にパーツを手に入れ、どちらか一方に置きます。

お気に入り:

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個人的には、対戦相手のコレクションを集めるのが好きです。
eduncan911 14

私の意見では、一致するセットを利用できるようにする方が読みやすくなります。
Travis J

0

私はあなたの目標を達成する最も簡単な方法はこれだと思います:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.