5

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}$/
6
  • So they must have a space but optionally a comma? Or are comma separated values (with no space) also valid such as Lorem,Ipsum? Also, is Lorem ,Ipsum valid? On that note, are Lorem, , Ipsum, Lorem,, Ipsum or Lorem Ipsum valid? Basically, what are your exact requirements/conditions? Commented Dec 14, 2017 at 19:23
  • Single words are accepted. If there is anything else after word example "Test" space or comma than it should be not accepted Commented Dec 14, 2017 at 19:37
  • I'm sorry, it's not clear what you're looking for. Commented Dec 14, 2017 at 19:42
  • 1
    Are you looking for \w+(?:[, ]+\w+)+? Commented Dec 14, 2017 at 19:50
  • Try ^\w+(?:(?:,\s\w+)+|(?:\s\w+)+)$ - it will match a string that starts with 1+ word chars, and then has 1 or more repetitions of , followed with a whitespace and 1+ word chars or 1+ repetitions of a space followed with 1+ word chars. Another way of writing it is ^\w+(?=(,?\s))(?:\1\w+)+$ Commented Dec 15, 2017 at 7:58

4 Answers 4

9

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Nice efforts for explaining all the granularities +1
2

Try this regex:

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

1 Comment

Although this may answer the questions, you may wan't to provide some extra details and explain the answer. In it's current state this answer is low-quality.
1

Assuming that you want to match the whole phrase:

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

should do the trick.

Comments

0

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.