JS正则表达式仅匹配特定模式

5

我需要修改我的Javascript正则表达式,只匹配特定的模式。该正则表达式用于html5的pattern属性,以验证输入字段。

我只想接受以下类型的字母数字模式:

A-AAAA或BB-BBB(预期模式为:"-"前1位数字,"-"后4位数字,或"-"前2位数字,"-"后3位数字)。

我的当前正则表达式是:

/([\w]{1,2})(-([\w]{3,4}))/g

这个正则表达式可以工作,但是它也接受 CC-CCCC 这种显然是有效的输入模式,但不是期望的模式。它也接受 DDD-DDDD,同样是有效的,但不是预期的。

请帮忙调整一下匹配模式吗?


2
使用起始和结束锚点,并且将您的2个模式用|分隔。https://regex101.com/r/uV8gI4/1#javascript - user1106925
1
@squint在pattern正则表达式中不需要锚定。 - user663031
@torazaburo:是的,你说得对。很好的观点! - user1106925
3个回答

2
您可以在HTML5的pattern属性中使用基于替换的正则表达式(因为它具有隐式锚点):
/(?:\w-\w{4}|\w{2}-\w{3})/

RegEx Demo


1
非常感谢。这个解决了我的问题! - Otto
@torazaburo:在这个正则表达式中,\b用于匹配单词边界。 - anubhava
1
我的问题是半反问的。没有必要使用单词边界。pattern 属性中的正则表达式将与整个输入进行匹配。 - user663031
需要单词边界,否则它将在“DDD-DDDD”中匹配“D-DDDD”。 - anubhava
1
不行,因为正如我所说的,pattern属性的值具有隐式锚定。 - user663031

0

另一个简单的替换示例:

/^\w-\w{4}$|^\w{2}-\w{3}$/

是的,但锚点不是必需的。 - user663031

0

写成这样可能会稍微短一些

/\w(-\w|\w-)\w{3}/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接