JavaScript正则表达式特殊字符

Jus*_*sti 0 javascript regex

为什么这个正则表达式

/^[^-_]*([A-Za-z0-9]{3,})+[-_]?[^-_]*$/i
Run Code Online (Sandbox Code Playgroud)

匹配这个字符串?

,abc,,.
Run Code Online (Sandbox Code Playgroud)

它清楚地说String应该只包含

  1. 至少3个字母
  2. 随后是可选的 - 或_
  3. 数字1和2的序列可以重复无限次
  4. 否 - 或_在字符串的开头或结尾

正则表达式不应该允许任何其他字符比A-z,0-9- or _,不过不失,这使他们.

提前致谢

Nie*_*sol 5

呃,实际上,它清楚地说:

  • 从头开始,
  • 任意数量的字符不是-_(匹配,)
  • 灾难性地回溯至少找到三个字母数字(匹配abc)
  • 可选择匹配-_(不匹配)
  • 任意数量的字符不是-_(匹配,,.)
  • 到最后.

你的意思是:

/^[a-z0-9]{3,}(?:[-_][12]+)?$/i
Run Code Online (Sandbox Code Playgroud)

更正,我误解了你的"第3点".

/^[a-z0-9]{3,}(?:[-_][a-z0-9]{3,})*$/i
Run Code Online (Sandbox Code Playgroud)