Abbreviate that US state!
Javascript, 137 135 134 132 113 110 108 101 99 94 93 92 90 bytes
This is originally based on HP Williams solution, with some improvements outside the regex, and a couple of tweaks within it, plus a couple of bytes from Primo.
s=&gt;s[0]+
  /.$/.exec(s.toUpperCase()
    .match`.* .|.*Z|...S.S?|T..|M[I-T]+|[AFINOUW][^O]V?|.*`
  )

(Linebreaks for readability only)
Commentary for the regex:
.*( .|z)|      // Two-or-three word states, plus Arizona
...s.s?|       // Mississippi, Missouri, Massachussetts, Alaska, and (non-harmfully) Kansas
M[i-t]+|       // Montana, Minnesota, Michigan
[AFINOUW][^o]v?|  // All the other first-two-letter states, avoiding Iowa/Connecticut/Louisiana, plus Nevada
T‌​..|           // Tennessee, Texas
.+             // Everything else is first-and-last

Alternative regex's (same length):
/...(a$|z|s.s?|.* .)|M[i-t]+|T..|[AFINOUW].v?|.*/  
/.*( .|z)|...s.s?|Te.|M[i-t]+|[^GHKMPVo]{2}v?|.*/
/.*( .|z)|...s.s?|M[i-t]+|[^GHKMPVo]{2}[vnx]?|.*/

History
92
s=&gt;s[0]+
/.*( .|z)|...s.s?|T..|M[i-t]+|[AFINOUW][^o]v?|.*/
.exec(s)[0].slice(-1).toUpperCase()

94
s=&gt;s[0]+/.*( .|z)|...s.s?|M[io]n?t?|[AFIOUWN][^o]v?|T..|.*/
.exec(s)[0].slice(-1).toUpperCase()

99
s=&gt;s[0]+/.*( .|z|l.*k)|T..|M.ss.s?|M[io]n?t?|[AFIOUWN][^o]v?|.*/
.exec(s)[0].slice(-1).toUpperCase()

101
s=&gt;s[0]+/.+[A-Zz]|Nev?|.*sk|M.ss.s?|M[io]n?t?|[AFIOUW][^o]|T‌​e.|.+/
.exec(s)[0].sl‌​ice(-1).toUpperCase(‌​)

108
 s=&gt;s[0]+/MI(N|SSO|S)|[CDGHKLPV].*|.* .|.*[XZV]|.*?N[NTE]|.*(SK|D$|WA)|../
.exec(s.toUpperCase())[0].slice(-1)

110
s=&gt;s[0]+/MI(N|SSO|S)|[CGHKLPV].*|.* .|.*[XZV]|.*?N[NTE]|.*(SK|[ED]$|WA)|../
.exec(s.toUpperCase())[0].slice(-1)

113
s=&gt;s[0]+/^MI(N|SSO|S)|^[CGHKLPV].*|.*?( .|[XZV])|.*?N[NTE]|.*(SK|[ED]$|WA)|../
.exec(s.toUpperCase())[0].slice(-1)

132
s=&gt;(S=s.toUpperCase(),' ._SSO_^MI[NS]_^[CGHKLPV].*_.V_N[TNE]_SK_[ED]$_WA_Z_X_..'
.split`_`.some(p=&gt;s=S.match(p)),S[0]+s[0].slice(-1))

134
s=&gt;' ._SSO_^MI[NS]_^[CGHKLPV].*_.V_N[TNE]_SK_E$_D$_WA_Z_X_..'.split`_`
.map(p=&gt;s=(z=s.toUpperCase().match(p))?s[0]+z[0].slice(-1):s)&amp;&amp;s

135
s=&gt;' ._SSO_^MI[NS]_LASK_^[CGHKLPV].*_NT_EN_[DE]$_WA_.[XVZ]_..'.split`_`
.map(p=&gt;s=(z=s.toUpperCase().match(p))?s[0]+z[0].slice(-1):s)&amp;&amp;s

137
s=&gt;' ._OWA_SSO_ONT_^MI[NS]_LASK_^[CGHKLPV].*_EN_[DE]$_.[XVZ]_..'.split`_`.
map(p=&gt;s=(z=s.toUpperCase().match(p))?s[0]+z[0].slice(-1):s)&amp;&amp;s