2016-11-17 25 views
1

我想在JavaScript中创建一个正则表达式的规则如下:正则表达式不worknig

  1. 至少2个字符。
  2. 应该至少有一个字母作为前缀,并以.结尾,或者有-,然后有更多字母。

以下字符串应该是合法的 - aaaaaaaa.a-aa a。 这些不应该是合法的 - a(太短),aa.aa.(两个点),aa--应该是另一个字母)。

我不知道我在做什么错在这里,但我的正则表达式似乎并没有工作,因为它是合法的但没有匹配单词吧:

(?=^.{2,}$)^(([a-z][A-Z])+([.]|[ -][a-zA-Z]+){0,1}$) 
+0

的结束时声明位置列表请使用编辑器工具编辑您的问题并设置您的代码的格式。另外,添加你正在尝试执行正则表达式的语言。 – Soviut

+0

也许编辑问题并添加一些有效/无效的例子会有所帮助。 – hwnd

+1

@SebastianProske请不要推荐错误的格式,编辑器有正确格式化代码所需的所有工具。反引号用于内联代码块,4位空格缩进用于多行代码块。 – Soviut

回答

3

只好把它完全重新编写以涵盖操作的评论。新的正则表达式是:

^[a-zA-Z][a-zA-Z]*[ -][a-zA-Z]*[a-zA-Z]$|^[a-zA-Z][a-zA-Z]*([a-zA-Z]|\.)$ 

Explanation

第一替代^[a-zA-Z][a-zA-Z]*[ -][a-zA-Z]*[a-zA-Z]$

  1. ^断言位置在一行
  2. [A-ZA-Z]匹配的单个的开始字符存在于[a-zA-Z]
  3. [a-zA-Z] * *量词 - 匹配零和无限制 倍(贪婪)
  4. [ - ]匹配单个字符 - 或在一行

第二替代的端部的空间

  • $断言位置 ^[a-zA-Z][a-zA-Z]*([a-zA-Z]|\.)$

    1. ^asserted在行首的位置

    2. [A-ZA-Z]匹配单个字符存在于[A-ZA-Z]

    3. [A-ZA-Z] * *量词 - 零和无限 倍(贪婪)之间匹配
    4. ([A-ZA-Z] |。)匹配单个字符存在于低于 [A-ZA-Z]或点
    5. $在一行
  • +0

    如果你使用SO支持的实时代码片段来演示这个实际进行匹配,那将是一件好事。 – Soviut

    +0

    @Soviut我其实不太了解活代码片断,还没有研究过它。 regex101链接已被共享。 –

    +0

    我在正则表达式中看到了一个空格,而''a-zA-Z - ]'中的'-'并不意味着'character -'。你需要'\ -'吗? –