Camila
Camila

Reputation: 177

Regex for multiple words separated by spaces or commas

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

Answers (4)

Nix
Nix

Reputation: 9

Since none of the above worked for me, I came up with this:

/([^,\s]+)/g

Upvotes: 0

Wiktor Stribiżew
Wiktor Stribiżew

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

Josh Withee
Josh Withee

Reputation: 11336

Try this regex:

^(\w+[, ]+)*\w+$

Upvotes: 2

eywalker
eywalker

Reputation: 11

Assuming that you want to match the whole phrase:

^(\w+(,|\s)\s*)+\w+$

should do the trick.

Upvotes: 1

Related Questions