You can't look at query strings in mod_alias (Redirect and RedirectMatch). It can only be done in mod_rewrite. This, in turn, may mean that you have to change all your existing redirects to use mod_rewrite syntax--it's very easy--so that everything happens in the right order. Besides, you already use mod_rewrite for canonicalization. Er. Ahem. Don't you?
I have a rule similar to what you describe. (Actually I've got two rules. One of them flat-out blocks any request with a query other than fbclid, as that's the only query used by legitimate humans. But we'll just talk about the redirect.)
RewriteCond %{QUERY_STRING} .
RewriteCond %{REQUEST_URI} ^/(.*)
RewriteRule (^|/|\.html)$ https://example.com/%1? [R=301,L]
Line by line, this means:
-- pattern of RewriteRule: only evaluate the conditions if the request is for a page (URL ending in / or .html on this site).
-- first RewriteCond: see if there's any kind of query string
-- second RewriteCond, only deployed if the first one is met: capture the requested URI
-- target of RewriteRule: redirect to the URI alone, stripping away the query string
I do it this way--two steps forward, one back--because the vast majority of requests will not have a query string, so there's no point in doing the work of capturing. If and only if there turns out to be a query,
then you capture the URI for re-use.
I've noticed recently that Google is dredging up some ancient URLs, in some cases going back as far as 2011. It's probably just routine housecleaning. But it does illustrate the point that once you've got a redirect in place, it needs to stay there forever.