/^^-_[^-_]$/gi;
您正在使用g
(全局)RegExp
。在JavaScript中,全局正则表达式处于状态:您第一次调用它们(使用exec
,test
等等),您将在给定字符串中获得第一个匹配项。再次调用它们,您将得到下一个匹配项,依此类推,直到没有匹配项,它将重置为下一个字符串的开头。您也可以写regex.lastIndex= 0
以重置此状态。
(这当然是绝对糟糕的设计,保证会造成混乱并引起奇怪的错误。欢迎使用JavaScript!)
可以省略g
从你的RegExp
,因为你只测试了一场比赛。
另外,我认为您不需要[^-_]
正面和背面。那将允许在每个末端的 任何 字符,即。*plop!
将是有效的。您可能正在考虑超前/向后断言,但是它们在JavaScript中不可用。(嗯,应该是超前的,但是在IE中是坏的。)建议:
/^[a-z0-9][a-z0-9_-]{2,18}[a-z0-9]$/i