正则表达式匹配?

And*_*ndy 18 javascript regex string match

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

var string = 'abc234832748374asdf7943278934haskhjd';

我想要匹配

abc234832748374 - 就是 - 我试过了

string.match(\abc[^abc]|\def[^def]|) 但这不能让我两个字符串因为我需要数字吗?

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

pax*_*blo 34

如果你想要文字字符串abcdef后面跟着8-11位数,你需要这样的东西:

(abc|def)[0-9]{8,11}
Run Code Online (Sandbox Code Playgroud)

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

要注意的是,如果你不希望匹配超过11位,您将需要一个锚(或[^0-9]字符串的结尾).如果它只是8个或更多,可以替换{8,11}使用{8}.


小智 11

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

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

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

  • 以"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);