2012-04-04 16 views
5

Próbuję uzyskać co najmniej trzy słowa oddzielone dwoma commas.I tej pory udało się dopasować dwa słowa z jednego przecinka zRegex dopasować trzech słów oddzielonych przecinkami dwóch

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

ale jak mogę dodaj przecinek i słowo do tego. Próbowałem powtórzyć to samo, ale nie działało.

+4

jakim językiem w tym wyrażeniu regularnym w? –

+3

Prawdopodobnie chcesz '[a-zA-Z]', a nie '[A-z]' – Yuval

+0

Wydaje się być javascript dla mnie, ale mogę się mylić. – Neil

Odpowiedz

5

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

To pozwoli ci oddzielone przecinkami listę co najmniej 3 słów ([a-zA-0-9 _] +).

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

Jest to nieco bardziej przyjazny dla użytkownika wersję pierwszego, pozwalając spacje między słowami.

+0

dzięki za pomoc.ale regexp nie zezwala na spacje między słowami jak ty wspomniałem –

+0

[Sam próbowałem.] (http://www.regular-expressions.info/javascriptexample.html) Jakiego przykładu próbowałeś? – Neil

+0

dziękuję za to. Jestem zadowolony z tego, co mi dałeś ale wydaje się, że pierwsze i trzecie słowa zajmują spacje między, ale drugi nie zawiera. Na przykład, (bardzo dobry, niezły, bardzo brzydki) nie przejdzie sprawdzania poprawności ale (bardzo dobrze, źle, bardzo brzydko) przechodzi walidację –

1

Jeśli jest to PERL derived regex, jak większość wprowadzonych w życie implementacji, /[^,]+(?:,[^,]+){2,}/ sprawdza się dobrze w stosunku do wszystkiego, co ma co najmniej dwa przecinki, pod warunkiem, że przecinki mają coś między nimi. Konstrukcja (?:) pozwala grupować bez przechwytywania. Konstrukt {2,} określa 2 lub więcej dopasowań poprzedniej grupy. W JavaScript można go przetestować:

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

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

Prawdopodobnie mógłbyś pójść bez '?:' W konstrukcie '(? :)', jeśli nie pochodzi on z PERL; ale wtedy dostaniesz przechwyty, których nie wiem, jeśli chcesz. – Yuval

0

kilka ogólnych wskazówek z punktu widzenia wydajności:

  1. Nie używaj [] | [] Klauzula - można po prostu umieścić kilka klas postaci wewnątrz jednego [] np [A-Za-z0-9]
  2. Nie nadużywaj() - zwykle każdy z nich przechwytuje przechwycony argument, który wymaga dodatkowego narzutu. Jeśli wystarczy do grupy kilka sztuk razem poszukać operatora grupowania że nie sklep mecz (może to być coś takiego (? ...))
+0

Proszę [edytuj swój post] (http://meta.stackoverflow.com/editing-help) jest prawie nieczytelny. – stema

0

Spróbuj tego:

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

ten rozwiąże problemu, spróbować tej

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

+0

Obejmuje to tylko pojedyncze znaki, np. a, b, c lub 1,2,3. –

Powiązane problemy