我正在用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
在括号内捕获时忽略括号的正确方法是什么?
答案 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中。如果您希望将包围括号捕获在单位周围,则只需将捕获组放在转义括号字符周围,而不是放在内部。>