2016-07-20 8 views
-1

node.jsサービスでは、文字列内の置換を実行したい場合、結果の文字列は元の文字列内の数値に依存します。私はstring.prototype.replaceを使用しなければならず、私はこれを一段階で行う必要があります。これらは条件が与えられているので、なぜ尋ねないでください。条件付きのJavaScriptの正規表現

var original = "blah/XX/blah"; //XX stands for 00-99 
var regexp = new RegExp(/blah\/(d{2})\/blah/, "g"); 
var alternate = "mama$1/mia"; 
var result = original.replace(regexp, alternate); 

期待される結果:私はこれを実現するにはどうすればよい

XX == 01 => mama/mia 
XX > 01 => mamaXX/mia 

+0

戻ってきたい文字列mama(XX)/ mia最初の文字列を置き換えますか? – eltonkamami

+0

BTW:コンストラクタに渡す文字列が動的ではなく静的であるため、RegExpコンストラクタを使用する必要はありません。 – hindmost

+0

文字列一致メソッドを使用し、ifステートメントを使用して、そのifステートメントの結果に基づいて異なる置換を行います。 – evolutionxbox

答えて

1

あなたは非キャプチャグループと交代でそれを行うことができます:var regexp = new RegExp(/blah\/(?:(01)|\d{2})\/blah/, "g");

説明:

  • (?:...)が非キャプチャグループであるので、それは$1には影響を与えません。
  • (?:(...)|...)は、2つの選択肢を持つ非キャプチャグループです。最初の選択肢は$1に保存されます。 2番目はグループ化されていません。
  • 01|\d{2}です。 01は両方に一致しますが、最初の一致で正規表現エンジンが停止します。

this fiddleで再生することができます。

+1

あなたの答えは私に必要なものとは逆のものでしたが、素晴らしいアイデアです。あなたの考えを使って、これは問題を解決します: 'var regexp = new RegExp(/ blah \ /(?あなたは '(01)'をキャプチャする必要はありませんが、 ''(01)|(\ d {2}))\/blah /、 "g"); ' ' var alternate = "mama $ 2/mia"; ' – Dondey

+1

'あなたは 'var regexp = new RegExp(/ blah \ /(?:01 |(\ d {2}))\/blah /、" g ")を使うことができます。 var alternate = "mama $ 1/mia"; ' –

1

あなたは整数を解析し、その値に応じて、異なる置換を指定するreplace内コールバックメソッドを活用することがあります。/blah\/(\d{2})\/blah/g

var original = "blah/01/blah"; //XX stands for 00-99 
 
var regexp = /blah\/(\d{2})\/blah/g; 
 
var result = original.replace(regexp, function($0, $1) { 
 
    return $1 !== "01" ? "mama" + $1 + "/mia" : "mama/mia"; 
 
}); 
 
console.log(result);

を我々は持っている、その後、blah/で始まるすべてのサブストリングと一致します2桁と/blahを入力し、数値が1より大きい場合は、"mama"と数字と"/mia"を連結してください。 1または0の場合は、"mama/mia"のみ返されます。

ちょうどFYI:正規表現に誤字がありました。は、dだけでなく、数字と一致します。

+0

真、数字マッチャーの前にバックスラッシュを入力するのを忘れました – Dondey

+0

私は今あなたが意味するものを見ます。私は答えを更新しましたので、あなたの問題を同様にうまく解決します。 'replace'の中でコールバックメソッドを使うのは柔軟な解決策ですが、ここでその柔軟性は必要ありません。とにかく、それは交互の非キャプチャグループの中でキャプチャするよりも読みやすくなります。 –