Issue
I won't lie, regex is definitely not a strength of mine so hoping to borrow the talent of someone whose it is.
What I need to do is from a string that would look something like this;
location = "Somewhere" and (Person IN (4,1)) and status in ("Closed")
I need specifically this portion;
(Person IN (4,1))
Wherein the portion of (4,1) could include a one-to-many array of number. So for example if I receive;
location = "Somewhere" and (Person IN (4,1,8,2,10,24,32,15,7)) and status in ("Closed")
Then the portion I need to extract would be;
(Person IN (4,1,8,2,10,24,32,15,7)) and the words contained are not case sensitive (eg; Person=person, IN=in) and there may be spaces between the numbers in the number[], but both the string and the number[] will be contained in (...) as shown and there may be other random stuff before and after the string contained.
A horrible attempt might be like: /(?:Person in \()(?:([\/\s"](?:,?)))(?:\))?/gm but I know obviously that's not what I need, please advise and help a regex amateur lol.
Solution
You can match the opening and closing parenthesis and the comma separated digits in between, where there can be optional whitspace chars surrounding the digits.
\(Person in \(\s*\d+\s*(?:,\s*\d+\s*)*\)\)
\(Person in \(Match(Person in (\s*\d+\s*Match 1+ digits between optional whitespace chars(?:,\s*\d+\s*)*Optionally repeat matching a comma and 1+ digits between optional whitespace chars\)\)Match))
An Example in Javascript
const regex = /\(Person in \(\s*\d+\s*(?:,\s*\d+\s*)*\)\)/gi;
const str = `location = "Somewhere" and (Person IN (4,1)) and status in ("Closed")
location = "Somewhere" and (Person IN ( 4, 1,8,2, 10,24 ,32,15, 7 )) and status in ("Closed")
location = "Somewhere" and (Person IN ()) and status in ("Closed")
location = "Somewhere" and (Person IN ( 4 )) and status in ("Closed")
`;
console.log(str.match(regex));
Answered By - The fourth bird
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.