2016-08-10 4 views
1

文字列内のすべての繰り返しゼロを少なくとも5行置き換えて、文字列"z(#)"と置き換える圧縮アルゴリズムを作成しようとしています。例えば正規表現の反復数を一致数で置き換える正規表現

"01100000210000000000000001" 

"011z(5)21z(15)1" 

私は、以下のものを使用して、サブストリングで繰り返さゼロの出現をすべて置き換えることができましたが、私はマッチの数を見つけるし、それを交換する方法を見つけ出すことはできません"z(#)"

string.replace(/(0{5,})/g, "hi"); 

これは正規表現を使用して行うことはできますか?

答えて

3

これはあなたの正規表現に特化していますが、replacement value parameter of replace will accept a functionを実証するだけです。

"01100000210000000000000001".replace(/0{5,}/g, function(matches) { 
    return 'z(' + matches.length + ')'; 
}) 
+1

(このコメントのような)のJavaScriptの現在のバージョン(https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.8.5に)されていますそれでもECMAScript 5に基づいています。この質問はECMAScript 6の質問としてマークされておらず、太い矢印の構文はECMAScript 6にしか書かれていません。答えの中で '=>'演算子の使用を明確にするか、現在のバージョンのJavaScriptでrunnableに書き換えてください。 –

+1

良い点、ありがとう@JosephMarikle。更新された –

+2

@JosephMarikle現在のJavaScript _バージョン_のようなものはありません。 ECMAScript 6は、現在行われている、リリースされた標準であり、JavaScriptが基づいています。 – Xufox

1
 String expression = "01100000210000000000000001"; 
     Pattern pattern = Pattern.compile("(0{5,})");  
     Matcher matcher = pattern.matcher(expression); 
     while(matcher.find()) { 
      String match =matcher.group(); 
      expression = expression.replaceFirst(match,"Z("+match.length()+")");    
     } 
関連する問題