Javascript 正则表达式在捕获括号时忽略括号
我正在用javascript解析一个文件&必须捕获一些值。例如,速度值如下所示。例如:Javascript 正则表达式在捕获括号时忽略括号,javascript,regex,Javascript,Regex,我正在用javascript解析一个文件&必须捕获一些值。例如,速度值如下所示。例如: > "velocity(22)".match("\\(([^()]*)\\)"); [ '(22)', '22', index: 8, input: 'velocity(22)' ] 上面的工作正常,22在匹配[1]中被捕获。问题是当这些值有论文中提到的单位时。例如: > "velocity(22 (m/s))".match("\\(([^()]*)\\)"); [ '(m/s)', 'm/s'
> "velocity(22)".match("\\(([^()]*)\\)");
[ '(22)', '22', index: 8, input: 'velocity(22)' ]
上面的工作正常,22
在匹配[1]中被捕获。问题是当这些值有论文中提到的单位时。例如:
> "velocity(22 (m/s))".match("\\(([^()]*)\\)");
[ '(m/s)', 'm/s', index: 12, input: 'velocity(22 (m/s))' ]
如上所示,捕获的是m/s
,而不是22(m/s)
在括号内捕获时,忽略括号的正确方法是什么?尝试以下方法:
const num=“速度(43)”;
常数单位=“速度(22(m/s))”;
常量正则表达式=/\(((\d+)(:\(.+)\)?)/
log(num.match(regex));
console.log(units.match(regex))代码>尝试使您的模式更具体一些,例如,在需要正则表达式的地方也不要使用字符串,额外的转义字符只会增加更多的混乱,实际上速度较慢,因为运行时必须从字符串重新编译RegExp
。console.log('velocity(22(m/s))。match(/\(?:[^)(]+\124;\([^)([^)(]*\))*)\)/)[1]);代码>