У меня есть строка:
let y = ".1875 X 7.00 X 8.800";
Я хотел бы вернуть это как массив из 3 чисел: 0,1875, 7,00, 8,800.
Мне нужно преобразовать .1875 в 0,1875, однако вы не можете просто указать первый символ, потому что что, если строка выглядит так:
let x = "7.00 X .1875 X 8.800";
or another difficult example
let y = ".50" x 1.25" x 7.125" will make one part"
Это моя попытка до сих пор:
let numbers = x.match(/(\d*\.)?\d+/g)
numbers.map(n => parseFloat(n))
var thickness = numbers[0]
var width = numbers[1]
var length = numbers[2]
if (thickness.charAt(0) == '.'){
let stringA = numbers[0].match(/^(\.)/g)
let stringB = "0"
thickness.replace(stringA, stringB)
console.info(thickness)}
else {
alert('failure');
}
Кажется, я не могу заменить . в 0,1875 до 0,1875, любая помощь очень ценится!
@ test3r123 ... OP на самом деле не хочет "... чтобы вернуть это как массив из 3 чисел: 0.1875
, 7.00
, 8.800
", а _как массив из 3 строковых чисел с очищенным / нормализованным числовым форматом "0.1875"
, "7.00"
, "8.800"
.
@PeterSeliger test3r123 - это ОП. В настоящее время вы говорите ОП, чего они хотят. И поскольку ОП принял ответ, который дает числа, я думаю, им нужны числа.
@jabaa ... почти ... ОП на самом деле сам придумал это требование, поскольку ОП утверждает ... «Я хотел бы вернуть это как массив из 3 чисел: 0,1875, 7,00, 8,800» ... Числовой тип никогда не будет выглядеть так, нули в конце опущены ... 0.1875, 7, 8.8
. Только строковое значение может соответствовать требованиям формата OP. Аудитория, кажется, думает одинаково, поскольку подходы, которые приводят результат к числовому типу, не пользуются большим спросом.
@PeterSeliger Я полностью понимаю, что вы имеете в виду, но другой ответ принимается.
Вот один из способов сделать это с помощью регулярного выражения:
let x = "7.00 X .1875 X 8.800";
const pattern = /\d*\.?\d+/g;
const numbers = [...x.matchAll(pattern)].map(Number);
console.info(numbers);
\d*
: Соответствует любой цифре от 0 до неограниченного количества раз, насколько это возможно.\.?
: необязательно соответствует .
.\d+
: соответствует любой цифре от 1 до неограниченного количества раз, насколько это возможно.Из комментария выше...
The OP actually does not want "... to return this as an array of 3 numbers:
0.1875
,7.00
,8.800
" but as an array of 3 stringified numbers with a sanitized/normalized number format"0.1875"
,"7.00"
,"8.800"
.
Возможным подходом было сочетание
/(?<!\d)(?:\d*\.)?\d+/g
... и....replace(/^\./, '0$&')
... допустимых числовых форматов.const sampleData = `
.1875 X 7.00 X 8.800
7.00 X .1875 X 8.800
.50" x 1.25" x 7.125" will make one part
.1875 X 7.00 X 8.800 X 456 X 13.45.56.343.343.
`;
// see ... [(?<!\d)(?:\d*\.)?\d+]
const regXValidNumber = /(?<!\d)(?:\d*\.)?\d+/g;
console.info(
sampleData
// retrieving the array of
// valid stringified numbers.
.match(regXValidNumber)
);
console.info(
sampleData
// retrieving the array of
// valid stringified numbers.
.match(regXValidNumber)
// normalizing the number format.
.map(str => str.replace(/^\./, '0$&'))
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
let y = ".50" x 1.25" x 7.125" will make one part"
недействителен JavaScript.