regex 如何编写1-4个罗马数字、2个西里尔字母和6个数字的JavaScript正则表达式?

bsxbgnwa  于 2023-05-23  发布在  Java
关注(0)|答案(1)|浏览(235)

我需要写一个正则表达式。长度> 1且<= 4个罗马数字,2个西里尔字母和6个数字。
检查罗马数字的正确性是必要的。
简体中文
我找到了这样一个提议,但它是在Perl中,并不完全符合我的需要

/^M{0,3}(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])(?<=.)-[А-Я]{2}$/

  • XVIААА123456 - true
  • IVА 123456 - true
  • XVIA - false
  • XVI -假
  • XVIA 123456-假
  • XVIAA 123-假
5rgfhyps

5rgfhyps1#

您可以使用以下命令:

^(?=[IVXLCDM]{1,4}[^IVXLCDM])(?:C(?:D|M)|D?C{0,3})(?:X(?:L|C)|L?X{0,3})(?:I(?:V|X)|V?I{0,3})[А-Я]{2}\d{6}$

这里:

  • ^字符串的开头,
  • (?=[IVXLCDM]{1,4}[^IVXLCDM]) lookahead检查begging后面是1到4个罗马数字(稍后检查西里尔符号之前的罗马数字的实际格式),
  • (?:C(?:D|M)|D?C{0,3})(?:X(?:L|C)|L?X{0,3})(?:I(?:V|X)|V?I{0,3})匹配罗马号码。引用自here
  • [А-Я]{2}匹配两个高位西里尔字母符号,
  • \d{6}匹配六个数字,
  • $匹配字符串的结尾。

演示here

相关问题