javascript - 通过 Javascript 在一次匹配中获取多个正则表达式匹配结果

标签 javascript regex

我试图通过删除那些重复代码来使我的代码看起来更专业。问题是我想从字符串中获取一些数据,具体来说,我需要知道 NUMBER, X, Y, Z, A, B 等值,但是正则表达式对于每个变量都是不同的,所以我不得不重复自己写很多重复的代码.

let TextString = `DRILL(NUMBER:=20,NAME:='4',PN:=1,X:=10.1,Y:=73.344,Z:=0,A:=-1.435,B:=1.045,M1:=1,M2:=2,M3:=3,M4:=4,M5:=1,S1:=10.5,S2:=2.1,S3:=1.2,S4:=2,S5:=2.4,RS1:=1,RS2:=2);`;
const regNumber = /(?<=NUMBER:=)[0-9]+/gm;
let lineNumber = Number(TextString.match(regNumber));

const regX = /(?<=X:=)(-?[0-9]+)(.[0-9]+)?/gm;
let X = Number(TextString.match(regX)).toFixed(1);

const regY = /(?<=Y:=)(-?[0-9]+)(.[0-9]+)?/gm;
let Y = Number(TextString.match(regY)).toFixed(1);

const regZ = /(?<=Z:=)(-?[0-9]+)(.[0-9]+)?/gm;
let Z = Number(TextString.match(regZ)).toFixed(1);

const regA = /(?<=A:=)(-?[0-9]+)(.[0-9]+)?/gm;
let A = Number(TextString.match(regA)).toFixed(1);

const regB = /(?<=B:=)(-?[0-9]+)(.[0-9]+)?/gm;
let B = Number(TextString.match(regB)).toFixed(1);
// and many more duplicate code.

console.log(lineNumber, X, Y, Z, A, B);

我只能想到像上面这样的方法,分别匹配每个变量并运行 .match() 多次,但正如您所看到的,总共有 17 个变量,在实际情况下,这些 TextString 有数百个。我担心这个匹配过程会对性能产生巨大影响。

是否有任何其他方法可以在一次匹配中获取所有变量并将它们存储在数组或对象中?或者任何其他优雅的方式来做到这一点?

最佳答案

每个坐标都有一个字母标识符,因此您可以使用更通用的正向回顾 (?<=,[A-Z]:=) .此回溯匹配一个逗号后跟一个大写字母然后是等号。

然后您可以使用 .match()获取所有匹配项并使用 .map()运行您正在执行的转换。

let TextString = `DRILL(NUMBER:=20,NAME:='4',PN:=1,X:=10.1,Y:=73.344,Z:=0,A:=-1.435,B:=1.045,M1:=1,M2:=2,M3:=3,M4:=4,M5:=1,S1:=10.5,S2:=2.1,S3:=1.2,S4:=2,S5:=2.4,RS1:=1,RS2:=2);`;
const regNumber = /(?<=NUMBER:=)[0-9]+/gm;
let lineNumber = Number(TextString.match(regNumber));

const regex = /(?<=,[A-Z]:=)(-?[0-9]+)(.[0-9]+)?/gm;
let coord = TextString.match(regex).map(n => Number(n).toFixed(1));

console.log(lineNumber, coord);

关于javascript - 通过 Javascript 在一次匹配中获取多个正则表达式匹配结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74895827/

相关文章:

javascript - 当单元格相同时制作行跨度

javascript - 功能设置不正确

javascript - 从 Ajax 查询中获取结果

java - 如何从json中提取正则表达式来解析短信(android)

javascript - 用于将引用语法转换为 HTML 的正则表达式

javascript - 表单提交不显示 JavaScript 输出

javascript - 在 HTML 中记住用户区域设置选择的最简单方法

java - 正则表达式:如果在字符串中找到另一个字符,则只允许一个字符

javascript - 如何使用正则表达式验证 Javascript 中的字符串?

regex - 如何使用正则表达式检测 float