Convert a pawn promotion from algebraic to ICCF numeric notation
JavaScript (ES6), 166 bytes

s=&gt;(g=n=&gt;parseInt(m[n][0],19)-9,m=s.match(/^([a-h]x)?([a-h][18]=[QRBN])[+#]?$/))?m[1]&amp;&amp;g(2)+~g(0)&amp;&amp;g(0)+~g(2)?'':''+g(0)+(m[2][1]-1|2)+g(2)+" QRBN".search(m[2][3]):''


The validation makes this horribly long. Without validation, it's only 108 bytes:

s=&gt;s.replace(/(.x)?(..=.).*/,([a],_,[c,d,,f])=&gt;g(a)+(d-1|2)+g(c)+" QRBN".search(f),g=f=&gt;parseInt(f,19)-9+'')