The string "Etc/GMT-1"
is a valid IANA time zone identifier. You can find it in the tzdb sources, and in the list on Wikipedia. As pointed out in the tzdb commentary, the sign is opposite from what you might expect. It means UTC+1, not UTC-1.
You also said: "I think timezone data format may be flexible." Indeed, if your data contains any tzdb zone identifiers, you should assume that all time zone identifiers are also valid, including the more conventional form like "America/Los_Angeles"
or "Asia/Shanghai"
. Therefore, you should not try to extract anything from the string itself.
It's important to remember that while some zones have a single fixed offset, most represent a series of offsets and the transition points between them. Therefore, you should not try to get a single offset from a time zone id without also considering a point in time. This is also covered in the timezone tag wiki, under the topic "Time Zone != Offset".
To use these with moment.js, you will also need the moment-timezone add-on. For example:
var timeZone = 'Etc/GMT-1'; // your time zone
var m = moment.tz(timeZone); // get the *current* time in the time zone.
// or
var m = moment.tz(input, timeZone); // get a *specific* time in the time zone.
// or
var m = someOtherMomentObject.clone().tz(timeZone); // convert to the time zone.
var n = m.utcOffset(); // 60 (minutes West of GMT at the given point in time)
var s = m.format('Z'); // "+01:00" (offset as a string in ISO-8601 format)