Как заменить символ в строке регулярным выражением?

У меня есть строка:

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, любая помощь очень ценится!

let y = ".50" x 1.25" x 7.125" will make one part" недействителен JavaScript.
jabaa 22.03.2022 21:29

@ test3r123 ... OP на самом деле не хочет "... чтобы вернуть это как массив из 3 чисел: 0.1875, 7.00, 8.800", а _как массив из 3 строковых чисел с очищенным / нормализованным числовым форматом "0.1875", "7.00", "8.800".

Peter Seliger 06.04.2022 10:28

@PeterSeliger test3r123 - это ОП. В настоящее время вы говорите ОП, чего они хотят. И поскольку ОП принял ответ, который дает числа, я думаю, им нужны числа.

jabaa 06.04.2022 10:40

@jabaa ... почти ... ОП на самом деле сам придумал это требование, поскольку ОП утверждает ... «Я хотел бы вернуть это как массив из 3 чисел: 0,1875, 7,00, 8,800» ... Числовой тип никогда не будет выглядеть так, нули в конце опущены ... 0.1875, 7, 8.8. Только строковое значение может соответствовать требованиям формата OP. Аудитория, кажется, думает одинаково, поскольку подходы, которые приводят результат к числовому типу, не пользуются большим спросом.

Peter Seliger 06.04.2022 10:48

@PeterSeliger Я полностью понимаю, что вы имеете в виду, но другой ответ принимается.

jabaa 06.04.2022 11:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вот один из способов сделать это с помощью регулярного выражения:

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; }

Другие вопросы по теме