给定模式的正则表达式

时间:2018-09-27 10:45:13

标签: javascript regex

我有下面的测试用例

      hello how are you     // 1. Allow  
  hello   how are you       // 2. Not Allow  
    hello <                 // 3. Not Allow  

适用以下规则:

  1. 允许在开始和结束处留空
  2. 不允许单词之间的空格多于
  3. 不允许尖括号< >

我正在尝试以下方法:

^([^<> ]+ )+[^<> ]+$|^[^<> ]+$

这是可行的,但是在开始或结束时留出空格是不允许的。

1 个答案:

答案 0 :(得分:0)

我假设您使用正则表达式在整个中查找匹配项 文本字符串(所有3行在一起)。

我还看到,您的两个选择都包含开始^和结束$, 因此您想将匹配项限制为行 并可能使用m正则表达式选项。

请注意,[^...]+表达式与以下字符匹配:其他 放在括号之间,但不排除 \n个字符, 可能不是您想要的。

因此,也许您应该在每个\n表达式中添加[^...]+

正则表达式扩展为:

^([^<> \n]+ )+[^<> \n]+$|^[^<> \n]+$

它与第1行和第2行匹配。

但是请注意,第一个替代项(^([^<> \n]+ )+[^<> \n]+$) 也可以做。

您确实希望第2行不匹配,请说明原因。

编辑

要在每行的开头/结尾保留任意数量的空格, 在初始*之后和最终^之前添加$,以便 正则表达式(仅第一个替代项)变为:

^ *([^<> \n]+ )+[^<> \n]+ *$

但它仍然与第2行匹配。

或者测试字符串中的点实际上是空格,但是您写了 使用点的字符串,以显示空格数? 您应该在问题中提到它。

编辑2

还有另一种可能性,允许点代替空格:

^[ .]*((?:[^<> .\n]+[ .])+[^<> .\n]+|[^<> .\n]+)[ .]*$

详细信息:

  • ^[ .]*-一行的开头+一系列空格或点,可能为空。
  • (-捕获组的开始-两个容器的容器 剥离的内容。
    • (?:[^<> .\n]+[ .])+-备选方案1:一系列“允许的”字符(“单词”)+ 一个空格或一个点(在下一个“单词”之前,重复几次)。 该组不必是一个捕获组,因此我放了?:
    • [^<> .\n]+-一系列“允许的”字符-最后一个“单词”。
  • |-或。
    • [^<> .\n]+-备选方案2:单个“单词”。
  • )-捕获组的结尾。
  • [ .]*$-空格/点的最后(可能为空)序列+ 行尾。

当然,可以选择m