【问题标题】:Javascript Regex for matching string between strings and a specific length用于在字符串和特定长度之间匹配字符串的 Javascript 正则表达式
【发布时间】:2020-07-06 17:59:32
【问题描述】:

我应该如何编写正则表达式以从具有以下条件的字符串中提取子字符串:

  • 起始字符应为A
  • 最后 2 个字符应为 00
  • 字符串的总长度应在 7 到 8 之间
  • 只有数字

意思是A + 12345678 + 00

例如:输入:ABC12345678CRP1234567F2801209A1234567800<<<33

输出:12345678

到目前为止,我已经尝试了下面的正则表达式,但似乎我遗漏了什么?

/(A(.*)00)/(失败,因为它与正确的长度不匹配

/(A(.*)00){7,8}/(我不确定为什么会失败,但想法是保持与以前相同并添加长度限制)

有什么想法吗?

【问题讨论】:

  • 可能,A(\d+)00 is enough
  • 我相信你的意思是,“字符串必须以'A'开头,然后是'00'”。如前所述,“A”和“00”是包含 7-8 个字符的字符串的一部分。

标签: javascript regex


【解决方案1】:

你可以试试:

A\d{7,8}00

上述正则表达式的解释:

  • A - 从字面上匹配 A
  • \d{7,8} - 匹配数字 7 到 8 次。
  • 00 - 从字面上匹配 00

你可以在here.找到上述正则表达式的demo

let string = `ABC12345678CRP1234567F2801209A1234567800<<<33`;
const regex = /A(\d{7,8})00/gm;

console.log(regex.exec(string)[1]);

【讨论】:

    【解决方案2】:

    您正在寻找这个正则表达式:/(A(\d{8})00|(A(\d{7})00))/gm

    解释:

    • A(\d{8})00:以“A”开头,8位数,以“00”结尾,或者
    • |:或者
    • (A(\d{7})00):以“A”开头,有7位数字,以“00”结尾,或者

    您将在第二组中获得完整匹配(“A########00”或“A#########00”),并且只有数字(“##### ###" 或 "#########") 在第二组中。

    演示:https://regex101.com/r/Ml1xih/1/

    【讨论】:

      【解决方案3】:
      (?<=A)(\d{7,8})(?=00)
      

      (?&lt;=A)肯定的lookbehind会确保匹配的字符串包含A
      (?=00)肯定的lookahead会确保字符串后面跟着00

      https://regex101.com/r/nP0Qu0/1

      【讨论】:

        猜你喜欢
        • 2020-10-19
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        相关资源
        最近更新 更多