# Regex (ECMAScript), 36 bytes

	^(-(x*)(?=\2$))?((x*)\4\4(?=\4$))*x$

[Try it online!](https://tio.run/##TY3BTsJAFEV/BSckvEftgKQxhjJ05YKFLHQpmozlMX06TJuZESrit1e6MHFzk3tOcu@7PuhQem5iGhrekt/X7oO@Oq8cHQePZO7bBuCklpNx9woptGOEQm1mQ8QC@rbJNllPsgsZt8NuPDmhjPVT9OwMoAyWS4Lb6zRDzI8VWwKwypPeWnYEiFfKfVqL30ZZGRrLEUZSjjDnHYBTRlpyJla4nJ3PHNZ6Dawa7QOtXATzPH1B/BP0X7jlTXEz7zXGytdHsXIHbXk78NoZmg9EYvNd7SHnhaKckwT7Q@DFtBCpmAuBiWiF9NSQjvCgYyX1WwC@7Mm9jmUFHrGsXagtSVubi8l/unQ2ze6k7PMX "JavaScript (SpiderMonkey) – Try It Online")

Takes its input in unary, as an optional `-` sign followed by a string of `x` characters, the count of which represents the absolute value of the number. (As such, it is not bijective unary, as zero can be represented in two ways. The regex works with both.)

If it sees a negative sign, it strips it and divides the number by 2 (requiring that there is no remainder). It then asserts that the remaining number is a power of 4.

```
^
(
    -                 # eat a leading negative sign
    (x*)(?=\2$)       # assert tail is even; tail = tail / 2
)?                    # do the above optionally
# Assert that tail is a power of 4
(                     # loop the following:
    (x*)\4\4(?=\4$)   # assert tail is divisible by 4; tail = tail / 4
)*                    # iterate as many times as possible (minimum 0)
x$                    # assert tail == 1; if this fails to match, the regex engine will
                      # try backtracking the loops, but that cannot result in a match
```