2017-01-14 11 views
0

リピート({})内でキャプチャされたグループ/逆参照を使用したいと思います。反復の中で逆参照が数値の代わりに引用符で囲まれているため、これは恐らく動作していません。引用符をエスケープする方法はありますか?javascript正規表現グループで繰り返す

明確な例:文字列は "B 2 zzzzz"です。私は1つの正規表現だけを定義することによって 'zz'を捕捉したい。私が試したのは:

'B 2 zzzz'.match(/B (\d)+ (z{\1})/) 

これは何も返されません。以下は

'B 2 zzzz'.match(/B (\d)+ (z{2})/) 

となります。だから私は\ 1逆参照が2の代わりに "2"であると推測しています。これを回避する方法はありますか?正規表現に定義することなくこれを行う別の方法は?

答えて

1

私は最初のものは、この値は新しい正規表現を構築するために、二次利用の数字をピックアップし、2正規表現を使用した方法で、ここで、単一の正規表現でそれを行う方法を参照することはできません。

str = 'B 3 zzzzz'; 
 
num = str.match('B (\\d+) z+'); 
 
re = new RegExp('B \\d+ (z{' + num[1] + '})'); 
 
z = str.match(re); 
 
console.log('z = '+z[1]);

別の方法:

str = 'B 3 zzzz'; 
 
num = str.match('B (\\d+) (z+)'); 
 
if (num[2].length >= num[1]) { 
 
    z = num[2].substr(0, num[1]); 
 
    console.log('z = ' + z); 
 
} else { 
 
    console.log('No match'); 
 
}

関連する問題