首页 > 解决方案 > 如何在节点 js 中创建正则表达式?

问题描述

样本数据就像

@ID_111_I1_0.000_I2_0.00_I3_-0.999*
@ID_232_TS_09.0*

我创建了一个正则表达式,例如:

const reg = new RegExp(/^@ID_[A-Z0-9._-]*\*/i);

但这对于像这样的字符串来说是有效的 @ID_111_I1_0.000_I2*

这里I2 的键在那里,但它的值没有显示以 this 开头的字符串@ID_ 然后用键值对和字符串结尾拆分* 请帮我解决问题!!!!

标签: node.jsregexstring

解决方案


检查以下是否适合您:

^@ID_\d+(?:_[A-Z\d]+_-?\d+(?:\.\d+)?)+\*$

查看在线演示

  • ^- 开始字符串锚。
  • @ID_- 从字面上匹配提到的内容。
  • \d+- 1+ 数字 0-9 以获得 ID#。
  • (?:- 打开第一个非捕获组:
    • _[A-Z\d]+- 下划线后跟 1+ 个字母数字字符。
    • _-?\d+- 下划线、可选连字符和 1+ 位数字。
    • (?:- 打开第二个非捕获组:
      • \.\d+- 一个文字点和 1 个以上的数字。
      • )?- 关闭第二个非捕获组并使其成为可选。
    • )+- 关闭第一个非捕获组并匹配 1 次以上。
  • \*- 字面星号。
  • $- 结束字符串锚。

请注意,我将键值对中的小数设为可选。如果需要,您可以强制要求:

^@ID_\d+(?:_[A-Z\d]+_-?\d+\.\d+)+\*$

推荐阅读