首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Gcode值的javascript regex

解析Gcode值的javascript regex
EN

Stack Overflow用户
提问于 2021-06-28 14:34:08
回答 2查看 176关注 0票数 1

我已经用头撞了两天了,但还是打不开。

我有包含数百行XY位置数据的Gcode文件,我试图计算出正则表达式,只提取"X“和"Y”字符后面的浮点值。

每一行Gcode通常都喜欢这样,并且使用起来相当简单。

G1X445.71Y602.47

但是偶尔我会有这样的奇怪的线条,这使得它变得更加棘手。

代码语言:javascript
复制
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代码像这样

代码语言:javascript
复制
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 

对于偶尔出现的不一致线

  • G1X446.11 -> X= 446.11 Y=null (为缺少的Y值添加一个null )
  • G1Y601.91 -> X= null Y= 601.91 (添加缺失X值的null )
  • G1X445.73Y602.26S76.5F300 -> X= 445.73 Y=602.26 (忽略F和S值)

离我最近的是X(?:\d+\.\d+|\d+),但它仍然保持着"X445.71“中的X

任何建议都非常感谢..。

EN

回答 2

Stack Overflow用户

发布于 2021-06-28 15:07:36

我找到了一篇与你的作品相关的文章。检查跟随URL

代码语言:javascript
复制
https://regexr.com/4222s

我建议您在找到"X445.71“之后尝试使用slice()函数删除"X”。

代码语言:javascript
复制
var X = lineData.match(/regex_to_find_X_float/).slice(1)
票数 0
EN

Stack Overflow用户

发布于 2021-06-28 21:09:08

如果值始终为正浮点值,则可以使用与3个捕获组的交替,其中Y值位于组2或组3中。

代码语言:javascript
复制
X(\d+\.\d+)(?:Y(\d+\.\d+))?|Y(\d+\.\d+)
  • X(\d+\.\d+)匹配X并捕获组1中的数字部分
  • (?:Y(\d+\.\d+))?可选择匹配Y并捕获组2中的数字部分
  • |
  • Y(\d+\.\d+)匹配Y组3中的数字部分

Regex演示

然后,您可以检查捕获组值。

代码语言:javascript
复制
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("---------------------------");
  }
});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68165237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档