2012-04-04 36 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