6

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

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

但是我怎样才能在这个中添加一个逗号和一个单词。我试过重复同样的内容,但没有奏效。

4

5 回答 5

5

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

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

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

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

于 2012-04-04T08:33:10.123 回答
2

如果它是PERL 派生的 regex,就像我遇到的大多数实现一样,/[^,]+(?:,[^,]+){2,}/它可以很好地针对其中至少有两个逗号的任何东西进行测试,前提是逗号之间有一些东西。该(?:)构造允许在不捕获的情况下进行分组。该{2,}构造指定了前一组的 2 个或更多匹配项。在javascript中,您可以对其进行测试:

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

/[^,]+(?:,[^,]+){2,}/.test("hello,world"); // returns false
于 2012-04-04T08:33:33.230 回答
0

从性能角度提出的一些一般性建议:

  1. 不要使用 [ ]|[ ] 子句 - 您可以在一个 [ ] 中放置几个​​字符类,例如 [A-Za-z0-9]
  2. 不要过度使用 () - 通常它们每个都存储捕获的参数,这需要额外的开销。如果您只需要将几部分组合在一起,请查找不存储匹配的分组运算符(可能类似于 (?: ... ) )
于 2012-04-04T08:33:42.747 回答
0

试试这个:

([a-zA-Z0-9]+)(,[a-zA-Z0-9]+){2,}
于 2012-04-04T08:41:03.617 回答
-1

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

([a-zA-Z0-9],[a-zA-Z0-9],([a-zA-Z0-9]))

于 2012-04-04T08:57:50.367 回答