正则表达式在捕获括号内时忽略括号

时间:2018-07-16 19:58:56

标签: javascript regex

我正在用javascript解析文件,并且必须捕获一些值。例如,速度值如下。例如:

include('function.php');
getcookie(); // This will output "testing function" from inside your function if your condition is met

以上操作正常,> "velocity(22)".match("\\(([^()]*)\\)"); [ '(22)', '22', index: 8, input: 'velocity(22)' ] 在match [1]中被捕获。问题在于值具有括号中提到的单位。例如:

22

如上所示,捕获了> "velocity(22 (m/s))".match("\\(([^()]*)\\)"); [ '(m/s)', 'm/s', index: 12, input: 'velocity(22 (m/s))' ] 而不是m/s

在括号内捕获时忽略括号的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

尝试一下:

const num = "velocity(43)";
const units = "velocity(22 (m/s))";
const regex = /\(((\d+)(?: \((.+)\))?)\)/

console.log(num.match(regex));
console.log(units.match(regex));

表达式:/\(((\d+)(?: \((.+)\))?)\)/

我们首先匹配一个括号:(\()并捕获其后的1个或多个数字((\d+))。这将是捕获组2。然后,我们想使用一个条件来确定是否存在单元。我们使用非捕获组((?:ABC))对字符进行分组,而不捕获不需要的空间。在内部,我们寻找一个空格,并在其后加上括号((?: \((.+)\)))中的任何字符集。字符集被捕获为捕获组3,我们使用?将非捕获组定义为可选。然后,我们检测到右括号\)并将整个选择内容包装在捕获组1中。如果您希望将包围括号捕获在单位周围,则只需将捕获组放在转义括号字符周围,而不是放在内部。