JavaScript正则表达式特殊字符

时间:2014-04-06 19:53:09

标签: javascript regex

为什么这个正则表达式

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

匹配此字符串?

,abc,,.

它清楚地表明字符串应该只包含

  1. 最少3个字母
  2. 后跟可选 - 或_
  3. 数字1和2的顺序可以重复无限次
  4. 否 - 或_在字符串的开头或结尾
  5. 正则表达式不应允许除A-z0-9- or _之外的任何其他字符,但它允许使用它们。

    提前致谢

4 个答案:

答案 0 :(得分:5)

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

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

你的意思是:

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

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

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

答案 1 :(得分:1)

[^-_]*表示不是-_,,,.满足该条件的0个或多个字符。

答案 2 :(得分:1)

[^-_]*将与第一个逗号匹配,([A-Za-z0-9]{3,})+将与abc匹配,[-_]?将不匹配任何内容,[^-_]*将匹配最后2个逗号和点。

请注意,使用i标记可以使用([A-Z0-9]{3,})+([a-z0-9]{3,})+以及当前的正则表达式。


如果你想:

  1. 最少3个字母
  2. 后跟可选 - 或_
  3. 数字1和2的顺序可以重复无限次
  4. 否 - 或_在字符串的开头或结尾
  5. 然后我会建议:

    /^(?:[a-z]{2}[-_]?)+[a-z]$/i
    

    如果通过'字母'你真的想要字母和数字,然后我会建议:

    /^(?:[a-z0-9]{2}[-_]?)+[a-z0-9]$/i
    

答案 3 :(得分:1)

[^-_]* 

不是“不 - 或_”而是“所有除了 - 或_” 因为你的表达的其他部分可能都缺席......

[^-_]*

让你的Regexp与字符串匹配。