正则表达式字符串匹配

Regex string match?

本文关键字:串匹配 字符串 字符 正则表达式      更新时间:2023-09-26

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

var string = 'abc234832748374asdf7943278934haskhjd';

我试图匹配喜欢

abc234832748374 - 那是 - 我已经尝试过

string.match('abc[^abc]|'def[^def]|)但这并不能让我得到两个字符串,因为我需要在它们后面加上数字?

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

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

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

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

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

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

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

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

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

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

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

以 g 结尾

面向全球"g"

"i"忽略大小写

多行"m"