我想在重复 ({}) 内使用捕获的组/反向引用。这不起作用可能是因为在重复内部反向引用是引号内的数字而不是数字。有没有办法摆脱引号?
举例说明:字符串是“B 2 zzzzz”。我想通过仅定义一个正则表达式来捕获“zz”。我尝试的是:
'B 2 zzzz'.match(/B (\d)+ (z{\1})/)
这不会返回任何内容。以下内容
'B 2 zzzz'.match(/B (\d)+ (z{2})/)
确实有效。所以我猜测\1 反向引用是“2”而不是 2。有没有办法避免这个?或者另一种无需定义正则表达式的方法?
最佳答案
我看不到使用单个正则表达式来完成此操作的方法,这是一种使用 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');
}
关于javascript正则表达式与组重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41650530/