2017-02-17 13 views
1

У меня есть регулярное выражение из следующих действий в JavaScript:Регулярное выражение повторяющийся узор с разделителями запятыми

/\w{1,}\s*\w{1,}/ 

Это проверяет, является ли строка имеет по крайней мере два слова больше, чем 1 символов каждая.

Экс-

asd fgh - Valid 
a b d dfd - Valid 
xscxs - Invalid 

теперь у меня есть новое требование, что я пытался реализовать, но не может получить права.

Новое требование: иметь список разделенных запятыми входных данных того же типа, что и раньше. Не может заканчиваться запятой. Каждый элемент должен быть действительным в соответствии с приведенными выше правилами.
Если нет запятой, то и ее действительная.
Кроме того, все символы алфавита и цифры не/специальные символы

Valid: HOH vfdffd,dsfds dfgd,UIU fgfd 
Valid: JOI JOIO 
Invalid: QASW fgdfg, 
Invalid: sdfds,1234 dfgdfg 
Invalid: JKJ,ABCD 
+0

Try [ '^ \ ш + (\ s \ W +) + (\ с * \ ш + \ s \ W +) * $'] (https://regex101.com/r/gCz1n8/ 1) – Tushar

+0

может существовать пространство около запятой, например 'HOH vfdffd, dsfds dfgd, UIU fgfd'? это было бы справедливо? – RomanPerekhrest

ответ

0

Вы можете указать шаблон для первого требования в качестве [a-zA-Z]+(?:\s[A-Za-z]+)+, чтобы соответствовать 1+ буквы символов, а затем совпадают 1+ последовательности пробелом + один или более слово символы, а затем просто повторить шаблон внутри другой группы с запятой:

/^[a-z]+(?:\s[a-z]+)+(?:,[a-z]+(?:\s[a-z]+)+)*$/i 

Смотрите regex demo (все \s заменены с пробелами в демонстрации, так как вход один многострочный строка).

Если допускается несколько пробелов, замените \s на \s+.

Детали:

  • ^ - начало строки
  • [a-z]+ - 1+ письмо
  • (?:\s[a-z]+)+ - 1 или более последовательностей (т.е. пространство является обязательным)
    • \s - пробел (добавьте +, чтобы соответствовать 1 или более оккультам)
    • [a-z]+ - 1+ буквы
  • (?:,[a-z]+(?:\s[a-z]+)+)* - ноль или более последовательностей (т.е. запятая не является обязательной) из
    • , - запятая
    • (?:\s[a-z]+)+ - смотрите выше
  • $ - конец строки.
+0

* Также все символы являются алфавитами и номерами * – RomanPerekhrest

+0

ОК, '\ w' следует заменить на' [a-zA-Z] 'или' [^ \ W \ d_] ' –

0
.regex(/^(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})(?:(?:\b\,)(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})*$/) 

Explanation: 

(?:\b\,) -> Match with a , at the beginning of the string only if its preceded by a word boundary 
(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4}) -> Match a string with letter and digits only if dont have 4 digits ow 4 letters