我想在重复({})中使用捕获的组/反向引用。这可能不起作用,因为在重复内部,反向引用是引号内的数字而不是数字。有没有办法逃避报价?
一个澄清的例子:字符串是" B 2 zzzzz"。我想抓住' zz'通过只定义一个正则表达式。我试过的是:
'B 2 zzzz'.match(/B (\d)+ (z{\1})/)
这不会返回任何内容。以下
'B 2 zzzz'.match(/B (\d)+ (z{2})/)
确实有效。所以我猜测\ 1反向引用是" 2"而不是2.有没有办法逃避这个?或者在不定义正则表达式的情况下执行此操作的其他方法?
答案 0 :(得分: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');
}