Regular languages are closed under complementation, so for every regular expression, there exists a regular expression that matches exactly the inputs that the original regexp doesn't match.
However, in the worst case, the smallest regexp that matches the complement language has a length that is exponential in the length of the original regexp. So while the regexp is guaranteed to exist, it is not guaranteed to be simple. It can be calculated algorithmically if you really need it.
^ operator to anchor a regexp isn't relevant. You may be thinking of
^ in a character set, as in
[^a-z] meaning “any one character that isn't a lowercase letter”. This is just part of the shortcut notation for character sets, it isn't helpful to complement a set of strings.
Some regular expression engines, such as the widely-used PCRE, support additional operators beyond the traditional ones including lookaround assertions. A negative lookahead assertion provides a simple way to negate a regular expression without having to break it down into parts. Check the documentation of your software to see what kind of regular expressions it supports.
Most systems don't need regexp complementation because you can achieve the same effect by using a matching inversion flag (e.g.
grep -v) or by ordering rules carefully in a first-match setting (if it matches
.*timetosa.* then do nothing and stop matching rules; if it matches
.* then do something).