2012-04-04 176 views
5

我试图让两个commas.I分离的至少三个单词分隔的三个词迄今设法匹配两个词有一个逗号,正则表达式匹配由两个逗号

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

,但我怎么能给这个添加一个逗号和一个单词。我试着重复同样的操作,但没有成功。

+4

什么语言在这个正则表达式中? – 2012-04-04 08:25:23

+3

你可能想要'[a-zA-Z]'而不是'[A-z]' – Yuval 2012-04-04 08:26:11

+0

看起来像javascript,但我可能是错的。 – Neil 2012-04-04 08:26:58

回答

5

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

这将让你一个逗号分隔的至少3个字表([A-ZA-Z0-9 _] +)。

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

这是第一个稍微更人性化的版本,允许单词之间的空格。

+0

感谢您的帮助。但是正则表达式不允许词之间的空格like提到 – 2012-04-04 09:15:08

+0

[我自己尝试过。](http://www.regular-expressions.info/javascriptexample.html)你尝试过什么样的例子? – Neil 2012-04-04 10:17:03

+0

感谢this.I很满意你给我什么,但似乎第一个和第三个单词之间的空间,但第二个doesnot.Foe的例子,(非常好,不坏,非常丑)不会通过验证但是(非常好,很坏,很丑)通过验证 – 2012-06-12 06:28:24

1

如果是PERL derived regex,我遇到的大多数实现都是/[^,]+(?:,[^,]+){2,}/,它对任何至少有两个逗号的东西进行测试,前提是逗号之间有一些逗号。 (?:)构造允许分组而不捕获。 {2,}结构指定了前一组的两个或更多匹配。在JavaScript中,你可以测试它:从性能的角度来看

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

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

如果它不是派生的PERL,你可以在'(?:)'结构中没有'?:'的地方去;但是然后你会得到抓拍,我不知道你是否想要。 – Yuval 2012-04-04 08:35:02

0

一些一般性建议:

  1. 不要使用[] | []子句 - 你可以把几个字符类里面一个[] ,例如[A-Za-z0-9]
  2. 不要过度使用() - 通常它们中的每一个都存储捕获的参数,这需要额外的开销。如果你只需要几组拼在一起寻找分组运算符不匹配店(这可能是这样的(?:...))
+0

请[编辑您的文章](http://meta.stackoverflow.com/editing-help)它几乎不可读。 – stema 2012-04-04 08:43:31

0

试试这个:

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

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

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

+0

这只会处理单个字符,例如a,b,c或1,2,3。 – 2013-09-30 13:24:02