微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于解析 Gcode 值的 javascript 正则表达式

如何解决用于解析 Gcode 值的 javascript 正则表达式

我已经用了两天的时间来解决这个问题,但仍然无法破解它。

我有包含数百行 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 值。值总是正浮点数。如此神奇的正则表达式代码是这样的

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

非常感谢任何建议...

解决方法

我找到了与您的工作相关的文章。 检查关注网址

https://regexr.com/4222s

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

var X = lineData.match(/regex_to_find_X_float/).slice(1)
,

如果值始终为正浮点值,您可以交替使用 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
  • 中的数字部分

Regex demo

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

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("---------------------------");
  }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。