javascript正则表达式在某些规则中匹配字符串?

时间:2017-06-04 14:47:27

标签: javascript regex

我的目的是找到一个函数,检查字符串是否以小写字母开头,以小写字母结尾,可能只包含一个或不包含连字符-,并且小于或等于到32个字符。

以下是我的代码:

var ss = /^[a-z]+([A-Za-z0-9_]|(-?)|[a-z]+$){1,31}/;
str="ss-fjdkkldjkskjdskjdksjdkjdkjklskssdkdkffdkdfkdfk";
ss.test(str);

测试字符串 结果是真的 aJDS-a a234bds aHJH878sjkJSK-ja

我的功能目前正在返回true,但与我的要求不符。 如果测试字符串与reg要求匹配,则结果应返回true。 我不知道为什么。

1 个答案:

答案 0 :(得分:1)

请注意,JS regex中的[A-Za-z0-9_]等于\w。所以,这里有几个解决方案:

  • 使用代码(str.length > 0 && str.length <= 32)检查整个字符串的长度,或者在下面的正则表达式建议中使用(?=.{1,32}$)字符串开头锚点后使用^正向前瞻
  • 如果您需要仅在字符串中包含单个-的字符串时匹配,请使用这样的可选非捕获组 - ^[a-z]\w*(?:-\w*[a-z])?$(=&gt; ^(?=.{1,31}$)[a-z]\w*(?:-\w*[a-z])?$)< / LI>
  • 如果该连字符是可选的,请在其后添加?量词:^[a-z]\w*(?:-?\w*[a-z])?$(=&gt; ^(?=.{1,31}$)[a-z]\w*(?:-?\w*[a-z])?$
  • 如果您需要仅匹配字符串中包含任意数量-的字符串,请使用^[a-z](?:[-\w]*[a-z])?$(=&gt; ^(?=.{1,31}$)[a-z](?:[-\w]*[a-z])?$)。