Regular Expression Repeating Pattern delimited by comma

*爱你&永不变心* 提交于 2021-01-29 04:31:48

问题


I have a regular expression of the following in Javascript:

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

This checks if a string has atleast two words greater than 1 character each.

Ex-

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

I now have a new requirement that I have tried to implement, but cannot get right.

New requirement: Be able to have a comma separated list of the same type of input as before. Cannot end with a comma. Each item must be valid per the rules above.
If there are no comma then also its valid.
Also all characters are alphabets and no numbers/special characters

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

回答1:


You may specify the pattern for the first requirement as [a-zA-Z]+(?:\s[A-Za-z]+)+ to match 1+ letters chars and then match 1+ sequences of a whitespace + one or more word chars, and then just repeat the pattern inside another group with a comma:

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

See the regex demo (all \s replaced with spaces in the demo since the input is one multiline string).

If multiple spaces are allowed, replace \s with \s+.

Details:

  • ^ - start of string
  • [a-z]+ - 1+ letter
  • (?:\s[a-z]+)+ - 1 or more sequences of (i.e. a space is obligatory)
    • \s - a whitespace (add + to match 1 or more occrurrences)
    • [a-z]+ - 1+ letters
  • (?:,[a-z]+(?:\s[a-z]+)+)* - zero or more sequences (i.e. a comma is optional) of
    • , - a comma
    • (?:\s[a-z]+)+ - see above
  • $ - end of string.



回答2:


.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


来源:https://stackoverflow.com/questions/42294787/regular-expression-repeating-pattern-delimited-by-comma

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!