Update: In the end, I've decided to validate against some map API, because there are too many cases which this piece of regexp can not cover.
^(N|S)?\s*(\d*[.])?\d+(\u00b0\s*)?((\d*[.])?\d+((\u0022)|((\u0027\s*)?)?((\d*[.])?\d+?(\u0022)?)?))?[\s\u002c]+(W|E)?\s*(\d*[.])?\d+(\u00b0\s*)?((\d*[.])?\d+((\u0022)|((\u0027\s*)?)?((\d*[.])?\d+(\u0022)?)?))?$
Use flag /i