Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 16.07.2020
Сообщений: 7
1

Преобразование элементов массива регулярным выражением

09.08.2020, 15:26. Показов 1403. Ответов 3

Author24 — интернет-сервис помощи студентам
Дан массив
Javascript
1
[" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"]
Он имеет строки и число.
Любой элемент, который содержит буквы нужно удалить.
Пробелы удалить(знаю что можно использовать trim()).
Остальные элементы привести к виду "$13.50", "$17.00" - число 17 тоже конвертировать в строку с долларом и нулями.

Возможно ли с помощью только одного регулярного выражения получить это:
Javascript
1
["$2.70", "$13.50", "$17.00", "$9.50"]
?

Если нет, то какой способ самый короткий?
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2020, 15:26
Ответы с готовыми решениями:

с регулярным выражением.
Имеем текст youtube.com/watch?v=LOZuxwVk7TU&ob=av2em нужно получить то что находится между...

Исправить код с регулярным выражением
Этот код нужно изменть. Задача: -Логин: Одна заглавная английская буква, остальные строчные. ...

Отличить две ссылки регулярным выражением
JQuery.expr.regex = function(elem, index, match) { var matchParams = match.split(','), ...

Сравнении введённых данных с регулярным выражением
Всем привет Сделал проверку данных формы Сначала всё было нормально. Потом на вот этой строчке...

3
Эксперт JS
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
09.08.2020, 18:02 2
Цитата Сообщение от MaxPlank Посмотреть сообщение
Возможно ли с помощью только одного регулярного выражения получить это: ["$2.70", "$13.50", "$17.00", "$9.50"].
Боюсь, что нет, так как вы как минимум хотите отсеять элементы с буквами и к тому же "обровнять" все числа. Самое короткое и понятное вот:
Javascript
1
2
3
4
5
const arr = [" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"];
const moneys = arr
  .flatMap(el => (el = el + '', ~el.search(/[^\d.\s]/) ? [] : ['$' + (+el.replace(/\s*([\d.]+)\s*/, '$1')).toFixed(2)]));
 
console.log(moneys);
Маленький разбор:
flatMap использован для того чтобы "отсеять" элементы с буквами(и всем остальным, не соответствующим регулярке [^\d.\s]) и обработать массив за один проход
el = el + '' - приведение к строке(так как регулярки работают со строками)
+el.replace(/\s*([\d.]+)\s*/, '$1') - получение числа из строки
.toFixed(2) - "округление" до двух цифр после запятой
1
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
09.08.2020, 19:11 3
Лучший ответ Сообщение было отмечено MaxPlank как решение

Решение

Iverycool, тут пожёcтче надо проверять. Можно на "1 2 3" нарваться.

Регуляркой:
Javascript
1
2
3
4
let array = [" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"];
 
let result = array.flatMap(e => /^ *(\d+(\.\d+)?) *$/.test(e) ? ["$" + (+e).toFixed(2)] : []);
console.log(result);
Без регулярки из нашей любимой игры "Угадай число":
Javascript
1
2
3
4
5
6
7
let array = [" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"];
let result = array.flatMap(e => {
    let input = String(e), number;
    return (number = +input) === parseFloat(input) && Number.isFinite(number)
        ? ["$" + number.toFixed(2)] : [];
});
console.log(result);
1
dev - investigator
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
09.08.2020, 19:11 4
Iverycool, немножко модернизирую Ваш вариант
Javascript
1
2
3
4
[" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"]
    .flatMap(
        v =>  +v  ?  `$${((+v).toFixed(2) + ``).replace(/[\s]/g, ``)}`  :  []
    );
1
09.08.2020, 19:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2020, 19:11
Помогаю со студенческими работами здесь

Как выбрать стиль регулярным выражением
Всем привет! Столкнулся с такой проблемой, нужно выбрать стиль регулярным выражением. Задача такая....

Извлечь цифры из текста после определённых символов регулярным выражением
Здравствуйте, пожалуйста помогите сделать следующее: имеется строка (например):...

Поиск соответствия содержания текстового поля с регулярным выражением не абсолютно
Добрый день! Помогите разобраться с регулярными выражениями, никогда до конца их не понимал....

Не вырезается слово регулярным выражением
Здравствуйте. Есть строка такого типа: ...Цвет: Белый,... ...Цвет: Рифт белый,... вобщем...

Разложить адрес по частям не регулярным выражением
Здравствуйте. Есть адреса поступающие из Prom ua. Они отличаются по формату друг от друга. Вот...

Ошибка при проверке поля регулярным выражением
Приветствую, возникла проблема при проверке #email регекспом, в любом случае выдает ошибку. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru