【问题标题】:Regex string match?正则表达式字符串匹配?
【发布时间】:2012-06-05 08:11:02
【问题描述】:

我在 javascript 中有一个长字符串,比如

var string = 'abc234832748374asdf7943278934haskhjd';

我正在尝试匹配

abc234832748374 - 那就是 - 我试过了

string.match(\abc[^abc]|\def[^def]|) 但这并没有让我得到两个字符串,因为我需要它们后面的数字?

基本上我需要abc + 8 个字符之后和def 之后的 8-11 个字符?我该怎么做?

【问题讨论】:

    标签: javascript regex string match


    【解决方案1】:

    您可以将abc[0-9]{8} 匹配为字符串abc 后跟8 位数字。

    如果前三个字符是任意的,后面是8-11位,试试[a-z]{3}[0-9]{8,11}

    【讨论】:

      【解决方案2】:

      如果您想要文字字符串 abcdef 后跟 8-11 位数字,您需要类似:

      (abc|def)[0-9]{8,11}
      

      你可以在这里测试它:http://www.regular-expressions.info/javascriptexample.html

      请注意,如果您不想匹配超过 11 个数字,则需要在字符串末尾添加一个锚点(或 [^0-9])。如果只是8个或更多,可以将{8,11}替换为{8}

      【讨论】:

        【解决方案3】:

        使用下面的正则表达式获得完全匹配,

        string.match(/(abc|def)\d{8,11}/g);
        

        以 g 结尾

        "g" 全球

        "i" 用于忽略大小写

        "m" 用于多行

        【讨论】:

          【解决方案4】:

          要详细说明已经发布的答案,您需要一个全局匹配,如下所示:

          var matches = string.match(/(abc|def)\d{8,11}/g);
          

          这将匹配字符串的所有子集:

          • 以“abc”或“def”开头。这是“(abc|def)”部分
          • 然后是 8-11 位数字。这是“\d{8,11}”部分。 \d 匹配数字。

          “g”标志(全局)为您提供所有匹配项的列表,而不仅仅是第一个匹配项。

          在您的问题中,您要求输入 8-11 个字符,而不是数字。如果它们是数字还是其他字符都没有关系,您可以使用“。”而不是“\d”。

          我还注意到,您的每个示例匹配在“abc”或“def”之后都有超过 11 个字符。如果可以使用任意数量的数字,那么以下正则表达式可能更适合:

          • 任意位数 - var matches = string.match(/(abc|def)\d*/g);
          • 至少一位数字 - var matches = string.match(/(abc|def)\d+/g);
          • 至少 8 位数字 - var matches = string.match(/(abc|def)\d{8,}/g);

          【讨论】: