What is a regex to match a string NOT at the end of a line?

ghz 1years ago ⋅ 6870 views

Question

The regex /abc$/ will match an abc that does appear at the end of the line. How do I do the inverse?

I want to match abc that isn't at the end of a line.

Furthermore, I'm going to be using the regex to replace strings, so I want to capture only abc, not anything after the string, so /abc.+$/ doesn't work, because it would replace not only abc but anything after abc too.

What is the correct regex to use?


Answer

/abc(?!$)/

(?!$) is a [negative lookahead](http://www.regular- expressions.info/lookaround.html). It will look for any match of abc that is not directly followed by a $ (end of line)

Tested against

  • abc ddee (match)
  • dddeee abc (no match)
  • adfassdf abc s (match)
  • f abc ddee (match)

applying it to your case:

ruby-1.9.2-p290 :007 > "aslkdjfabcalskdfjaabcaabc".gsub(/abc(?!$)/, 'xyz')
  => "aslkdjfxyzalskdfjaxyzaabc"