2016-10-10 16 views
4

正規表現のパターンマッチの文字列の一部だけを置きたいと思います。私はthis answerを見つけましたが、私はそれを取得しません...
私はどのように置換を使用しますか?私が何をしたいのregex一致の一部のみを置き換えます

例:だけ他人を交換

/09/small_image/09x/>/09/thumbnail/
第一、最初のスラグの桁を保つ:unknown digit
第二:"small_image"
第三:ここunknown digit + "x"

は私が持っているものですこれまで:

var regexPattern = /\/\d\/small\_image\/\d*x/; 
var regexPattern = /\/\d\/(small\_image\/\d*x)$1/; ?? 

var result = regexPattern.test(str); 
if (result) { 
    str = str.replace(regexPattern, 'thumbnail'); 
} 
+0

完全な文章を使って、正確に何をしようとしているのかを明確にすることはできますか?英語があなたの母国語でない場合はお詫び申し上げます。 – qxz

+0

返事ありがとう、申し訳ありませんが、私の最初の言語です。私は文字列の一部を置換する方法を知りたいのですが、正規表現パターンマッチ文字列全体を置き換えないでください。 – user1775888

+0

したがって、09xの最初の「09」と「09」は一致する必要がありますか? –

答えて

6

var input = "/09/small_image/09x/"; 
 
var output = input.replace(/(\/\d+\/)small_image\/\d*x/, "$1thumbnail"); 
 
console.log(output);

説明:

にしたい部分を入れ置換文字列$1ように、その参照、その後、括弧内を保つ - あなたの正規表現で$1を入れないでください。したがって、(\/\d+\/)は、スラッシュと1つ以上の数字の後にスラッシュを続けてマッチさせることを意味します。

(あなたが正規表現でアンダースコアをエスケープする必要はないことに注意してください。)

+0

より厳密には:/ \ /(\ d +)\/small_image \/\ 1x/' – Tibrogargan

+0

ありがとうございます! $ 1は、他の部分を$ 2 $ 3としてグループ化することを意味します... – user1775888

+0

@Tibrogargan - 私は '\ 1'を使って考えましたが、あなたが示した方法は、サブマッチ内の先頭の' \/'のためにはうまくいかないでしょう。 – nnnnnn

0

ゴー

var regexPattern = /(\/\d+\/)small\_image\/\d*x/; 

str = str.replace(regexPattern, '$1thumbnail'); 

まずと、あなたは+を欠落していました。 09は2桁であるため、1桁以上の数字に一致する正規表現が必要です(\ḑは正確に1になります)。これは、\d+
第2のによって実行されます。一致するものはすべて最初に削除されています。その後/09/一部を取り戻すために、あなたは( ... )、その後は他のグループを作成し、$2によってそれらを参照することができ$1
つを介して交換でそれを参照する正規表現で括弧の中にそれを置くことによって、それを覚えておく必要があり、 $3 ...

関連する問題