如何构建正则表达式以匹配引号中的字符串?

时间:2018-07-24 13:18:03

标签: javascript regex

使用JavaScript这么长时间后,我会知道如何构建正则表达式,但是学习^^

太繁琐了

我需要一个能匹配引号中一个字符串的正则表达式。

例如:"CC1AD849"

  • 长度始终为8
  • 这只是大写字母,与0-9和A-Z混合
  • 它需要找到至少包含2个数字和2个字母的字符串 因此它与"AAAAAAAA""12345678"
  • 不匹配

到目前为止,我得到了/"[A-Z0-9]{8}"/,但没有满足最后的条件...
(它会找到很多我不感兴趣的词)

2 个答案:

答案 0 :(得分:5)

您可以使用

/"(?=(?:[0-9]*[A-Z]){2})(?=(?:[A-Z]*[0-9]){2})[A-Z0-9]{8}"/g

请参见regex demo

详细信息

  • "-双引号
  • (?=(?:[0-9]*[A-Z]){2})-当前行右边的正向查找,需要两个任意0+数字的序列,后跟一个大写ASCII字母
  • (?=(?:[A-Z]*[0-9]){2})-当前行右边的正向查找,需要两个序列,这些序列包含任意0+个大写ASCII字母,后跟一个数字
  • [A-Z0-9]{8}-8个大写ASCII字母或数字
  • "-双引号。

JS演示:

var s = '"CC1AD849" "11111112" "CDFGHJYF"';
console.log(s.match(/"(?=(?:[0-9]*[A-Z]){2})(?=(?:[A-Z]*[0-9]){2})[A-Z0-9]{8}"/g));

答案 1 :(得分:1)

应该是这样的:

/^(?=(.*\d){2})(?=(.*[A-Z]){2})[A-Z0-9]{8}$/

说明:

/^
  (?=(.*\d){2})     // uses lookahead (?=) and says the password must contain at least 2 digits
  (?=(.*[A-Z]){2})  // uses lookahead (?=) and says the password must contain at least 2 Upper Case chars
  [A-Z0-9]{8}       // should contain strictly 8 from the mentioned characters
$/