我已经用头撞了两天了,但还是打不开。
我有包含数百行XY位置数据的Gcode文件,我试图计算出正则表达式,只提取"X“和"Y”字符后面的浮点值。
每一行Gcode通常都喜欢这样,并且使用起来相当简单。
G1X445.71Y602.47
但是偶尔我会有这样的奇怪的线条,这使得它变得更加棘手。
G1X446.11 // no Y value
G1Y601.91 // no X value
G1X445.73Y602.26S76.5F300 // Y value is followed by S or F values我试着计算出正则表达式,在任何情况下只提取X和Y值。这些值总是正数浮动。所以神奇的regex代码像这样
var lineData = "G1X445.71Y602.47";
var X = lineData.match(/regex_to_find_X_float/)
var Y = lineData.match(/regex_to_find_Y_float/)
//resulting in: X= 445.71 Y= 602.47 对于偶尔出现的不一致线
离我最近的是X(?:\d+\.\d+|\d+),但它仍然保持着"X445.71“中的X
任何建议都非常感谢..。
发布于 2021-06-28 15:07:36
我找到了一篇与你的作品相关的文章。检查跟随URL
https://regexr.com/4222s我建议您在找到"X445.71“之后尝试使用slice()函数删除"X”。
var X = lineData.match(/regex_to_find_X_float/).slice(1)发布于 2021-06-28 21:09:08
如果值始终为正浮点值,则可以使用与3个捕获组的交替,其中Y值位于组2或组3中。
X(\d+\.\d+)(?:Y(\d+\.\d+))?|Y(\d+\.\d+)X(\d+\.\d+)匹配X并捕获组1中的数字部分(?:Y(\d+\.\d+))?可选择匹配Y并捕获组2中的数字部分|或Y(\d+\.\d+)匹配Y与组3中的数字部分然后,您可以检查捕获组值。
const regex = /X(\d+\.\d+)(?:Y(\d+\.\d+))?|Y(\d+\.\d+)/;
[
"G1X445.71Y602.47",
"G1X446.11",
"G1Y601.91",
"G1X445.73Y602.26S76.5F300"
].forEach(s => {
const m = s.match(regex);
if (m) {
if (m[1]) console.log(`X: ${m[1]}`);
if (m[2]) console.log(`Y: ${m[2]}`);
if (m[3]) console.log(`Y: ${m[3]}`);
console.log("---------------------------");
}
});
https://stackoverflow.com/questions/68165237
复制相似问题