正则表达式匹配?

时间:2012-05-31 04:13:01

标签: javascript regex string match

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

var string = 'abc234832748374asdf7943278934haskhjd';

我想像

那样匹配

abc234832748374 - 就是 - 我试过像

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

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

4 个答案:

答案 0 :(得分:32)

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

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

您可以在此处进行测试:http://www.regular-expressions.info/javascriptexample.html

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

答案 1 :(得分: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);

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

以g结尾

全球

"g"

"i"用于ignoreCase

多行

"m"

相关问题