Что ж, ваши данные немного странные, особенно в последнем случае, когда кажется, что значение может быть отрицательным. Однако это регулярное выражение должно работать для описываемых вами случаев, и вы можете впоследствии повторно комбинировать части (знак, значение и единицу) любым способом.
let data1 = 'in the world- 6 lo'
let data2 = 'in the -world- 6 lb'
let data3 = 'and- the- dog -8kl'
let reg = /- ?(-|\+)?(\d+\.?\d*) ?(\w+)/;
[data1, data2, data3].forEach(s => {
console.log("Checking string:", s);
const matches = s.match(reg);
console.log("Sign:", matches[1] ?? "+");
console.log("Value:", matches[2]);
console.log("Unit:", matches[3]);
});
Обратите внимание, что я бы избегал использования глобального флага g
, поскольку он не позволяет методу .match
возвращать содержимое каждой группы захвата.