2012-05-31 285 views
12

我在JavaScript中有一个很长的字符串像正则表达式字符串匹配?

var string = 'abc234832748374asdf7943278934haskhjd';

我想匹配像

abc234832748374 - 那就是 - 我试图像

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

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

回答

25

如果你想要的文字串,然后8-11位abcdef,你需要的东西,如:

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

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

注意的是,如果你不想匹配超过11双控释片,你需要在字符串的结尾锚(或[^0-9])。如果它只是8个或更多,你可以用{8}取代{8,11}

1

可以为后面8位数字的字符串匹配abcabc[0-9]{8}

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

1

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

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

相克

"g"全球

"i"为IGNORECASE

"m"用于多

9

要结束阐述在已经发布的答案,你需要一个全球性的比赛,具体如下:

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);
+1

+1需要时间写一个解释! –