正则表达式,用于在<input /> JQuery中重复(类似)表达式

时间:2018-10-03 08:30:18

标签: javascript regex

我有一个输入文本字段,其中包含这样的商品编号:

ABC_ABC123; AB__B2A4; ABF_323WET; ...

所以我想让用户保留艺术品编号。格式...

这是我的正则表达式,适用于一个艺术编号:

var mask1 = /^([A-Z]{2})([A-Z|_]{1})_([A-Z0-9]{0,16});$/;

但是我想将其扩展为更多的字符串/艺术编号

我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:2)

在单项模式中,小写字母匹配存在问题,必须将它们添加到字符类[A-Z0-9]{0,16} => [A-Za-z0-9]{0,16}中。

整体解决方案如下

/^[A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};(?: [A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};)*$/

请参见regex demo

详细信息

  • ^-字符串的开头
  • [A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};-您的项目模式:
    • [A-Z]{2}-两个大写ASCII字母
    • [A-Z_]-大写ASCII字母或_
    • _-一个_字符
    • [A-Za-z0-9]{0,16}-0到16个字母数字ASCII字符
    • ;-分号
  • (?: [A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};)*-0次或多次出现
    • -空格(用\s替换以匹配任何空白,构造函数符号中的\\s
    • [A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};-项目模式
  • $-字符串的结尾。

在JS中,您可以动态构建模式以使其可读:

var block = "[A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};"
var regex = new RegExp(`^${block}(?: ${block})*$`)
console.log( regex.test("ABC_abc123; AB__B2A4; ABF_323WET;") )