Bi-directional translator Bi-directional translator
The challenge is to create a translator that can translate a [a-zA-Z ] string into another string according to the mappings below. The translator should also be able to translate translated text back into its normal form (hence bi-directional). Case doesn't have to be maintained and can be either lower/uppercase (or both lower and upper-cased) in the output, however your program should be able to handle either lower/uppercase strings.
Here is the specification of the mappings for this challenge:
-------------------
|Letter | Mapping |
-------------------
|   S   |    9    |
|   F   |    1    |
|   H   |    5    |
|   X   |    =    |
|   Z   |   {N}   |
|   M   |   --*   |
|   N   |   :)    |
|   G   |    ]    |
|   T   |    [    |
-------------------

Here are some example in/outputs:
(The &quot; or ... or ...&quot; obviously shouldn't be in your actual output, its just to demonstrate the possible outputs)
&gt; ABS
&lt; AB9 or ab9 or Ab9 or aB9

&gt; foo
&lt; 1oo or 1OO or ...

&gt; FIZZ BUZZ
&gt; 1i{N}{N} bu{N}{N} or 1I{N}{N} BU{N}{N} or ...

&gt; {n}[:) 
&lt; ztn or ZTN or ...

&gt; bar
&lt; bar or BAR or ...

The inputs will always be in [a-zA-Z ] or a &quot;translated&quot; string containing the mapped symbol, other symbols or characters outside wouldn't be inputted.
JavaScript (ES6),  118 113  109 bytes

s=&gt;s.toUpperCase(A=[':)',...'NF1G]H5S9T[X=Z','{N}','M','--*']).replace(/[{-]..|:?./g,c=&gt;A[A.indexOf(c)^1]||c)

Try it online!
How?
Because the input is guaranteed to contain exclusively [a-zA-Z] and/or the special patterns, we can use the following minimal regular expression to match them all:
/[{-]..|:?./g
 [{-]..        // either &quot;{&quot; or &quot;-&quot; followed by 2 other characters
               // -&gt; to match &quot;{N}&quot; or &quot;--*&quot;
        :?.    // or any character, preceded by an optional &quot;:&quot;
               // -&gt; to match &quot;:)&quot; or any single character

Working on the uppercase version of the input, we look for the position of each matched pattern in the lookup array A[] and replace it with its counterpart, or leave it unchanged if it is not found (which may only happen for ABCDEIJKLOPQRUVWY).