正则表达式匹配由两个逗号分隔的三个单词

时间:2012-04-04 08:23:14

标签: regex

我试图用两个逗号分隔至少三个单词。到目前为止,我设法将两个单词与一个逗号匹配

/([A-z]|[0-9])(,{1})([A-z]|[0-9])/ 

但是如何为此添加一个逗号和一个单词。我尝试重复相同但不起作用。

5 个答案:

答案 0 :(得分:5)

/^(?:\w+,){2,}(?:\w+)$/

这将为您提供至少3个单词的逗号分隔列表([a-zA-Z0-9 _] +)。

/^\s*(?:\w+\s*,\s*){2,}(?:\w+\s*)$/

这是第一个用户友好的版本,允许在单词之间留出空格。

答案 1 :(得分:2)

如果它是PERL derived regex,就像我遇到的大多数实现一样,/[^,]+(?:,[^,]+){2,}/可以很好地测试其中至少有两个逗号的内容,只要逗号之间有逗号即可。 (?:)构造允许分组而不捕获。 {2,}构造指定前一组的两个或多个匹配项。在javascript中,您可以测试它:

/[^,]+(?:,[^,]+){2,}/.test("hello,world,whats,up,next"); // returns true

/[^,]+(?:,[^,]+){2,}/.test("hello,world"); // returns false

答案 2 :(得分:0)

从绩效角度来看,很少有一般性建议:

  1. 不要使用[] | []子句 - 你可以在一个[]中放几个字符类,例如[A-ZA-Z0-9]
  2. 不要过度使用() - 通常每个都存储捕获的参数,这需要额外的开销。如果你只需要将几个部分组合在一起寻找不存储匹配的分组操作符(它可能类似于(?:...))

答案 3 :(得分:0)

试试这个:

([a-zA-Z0-9]+)(,[a-zA-Z0-9]+){2,}

答案 4 :(得分:-1)

这将解决您的问题, 试试这个

([A-ZA-Z0-9],[A-ZA-Z0-9],([A-ZA-Z0-9]))