Reputation: 177
I'm trying to create regex for multiple strings separated by comma or space.
Lorem Ipsum // valid
Lorem, Ipsum //valid
Lorem, Ipsum, Ipsum, Ipsum // multiple valid
Lorem // invalid without space/comma
Here is what i have so far:
^\w+(,\s*\w+){3}$/
Upvotes: 5
Views: 15267
Reputation: 626845
You may use
^\w+(?:(?:,\s\w+)+|(?:\s\w+)+)$
See the regex demo.
The regex matches:
^
- start of string\w+
- 1+ word chars(?:
- start of an alternation group:
(?:,\s\w+)+
- ,
, whitespace, 1+ word chars|
- or(?:\s\w+)+
- whitespace and then 1+ word chars)
- end of group$
- end of string.You may shorten the pattern using a lookahead and a capturing group:
^\w+(?=(,?\s))(?:\1\w+)+$
See the regex demo. Here, the difference is (?=(,?\s))(?:\1\w+)+
:
(?=(,?\s))
- a positive lookahead that checks if there is an optional ,
and then a whitespace immediately to the right of the current location and captures that sequence into Group 1(?:\1\w+)+
- 1 or more sequences of:
\1
- the same text captured into Group 1\w+
- 1+ word chars.See the regex demo.
Upvotes: 9
Reputation: 11
Assuming that you want to match the whole phrase:
^(\w+(,|\s)\s*)+\w+$
should do the trick.
Upvotes: 1