18

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

var string = 'abc234832748374asdf7943278934haskhjd';

我正在尝试匹配

abc234832748374- 那就是 - 我试过了

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

基本上我需要abc+ 8 个字符之后和def8-11 个字符之后?我怎样才能做到这一点 ?

4

4 回答 4

35

如果您想要文字字符串abcdef后跟 8-11 位数字,则需要以下内容:

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

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

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

于 2012-05-31T04:17:09.310 回答
11

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

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);
于 2012-05-31T04:36:50.380 回答
1

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

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

于 2012-05-31T04:16:52.233 回答
1

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

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

以 g 结尾

"g"为全球

"i"对于忽略大小写

"m"用于多线

于 2012-05-31T04:26:26.350 回答