regular expression to find word after a character and before another one if included

javascript, regex

Solution

I believe the best pattern would be:

/^[^\#\?]+\/media-group\/([^\?]+).*$/

which breaks out as:

^                 - start of string
[^\#\?]+          - one or more non-hash, non-question-marks
\/                - literal char
media-group       - literal chars
\/                - literal char
(                 - start capture group
  [^\?]+          - one or more chars non-question-marks
)                 - end of capture group
.*                - zero or more chars
$                 - end of string

The reason this works is because [^\?]+ is "greedy" in that it will attempt the longest possible match, which encompasses either a question-mark followed by arbitrary chars, or nothing, since all chars to the end of the string have already been captured in the non-question-mark capture group.

So, using

var RE=new RegExp(/^[^\#\?]+\/media-group\/([^\?]+).*$/),
    url="image/media-group/rugby-league-programme-covers-3436?sort=title";

console.log(url.match(RE)[1])

prints: `rugby-league-programme-covers-3436` and changing url to `image/media-group/rugby-league-programme-covers-3436`, produces the same result.

Update

Modified the pattern re David Foerster's comment.

Problem

I have a url like: image/media-group/rugby-league-programme-covers-3436?sort=title or image/media-group/rugby-league-programme-covers-3436 I need to get everything after media-group and not including `?` or anything after. So in both instances `rugby-league-programme-covers-3436` is what I need to return I used the regular expression `/media-group/(.*)\?` which works for the instance where there is a query string but not in the instance where there is no query string. I am using the below code ``` var patt=new RegExp('/media-group/(.*)\?'); return patt.exec(url)[1]; ``` Your help on this would be most appreciated

Original source