Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   replace() по шаблону (https://javascript.ru/forum/misc/83213-replace-po-shablonu.html)

Storm03 16.10.2021 10:15

replace() по шаблону
 
С сервера для работы приходит некий массив в виде строки для работы на фронте:
var goods_arr = "Z0000001557;Z0000001536;";

Для удаления элемента в функции использовался replace:
goods_arr = goods_arr.replace(s+";", "");

где s - это код товара.
В зависимости от контекста goods_arr может приходить и в другом виде:
var goods_arr = "UT000018375@5@12;UT000020474@1@150;UT000026718@20@58;Z0000001404@10@456;"

Конечно, можно теперь удаление обрабатывать через split() - forEach() - join(), но это как-то не изящно...:)
Есть ли какой-нибудь способ сделать replace что-то типа replace(s+"*;", "")?

Aetae 16.10.2021 10:24

Есть, но это некрасиво и чревато.
Лучше таки делать split и хранить в виде массива. Удалять тоже из массива.
А собирать обратно в строку только когда это действительно понадобится.
Это надёжно и явно.

Storm03 16.10.2021 10:33

Цитата:

Сообщение от Aetae (Сообщение 540731)
Это надёжно и явно.

Понятно. Спасибо)))

ksa 16.10.2021 11:10

Цитата:

Сообщение от Storm03
Конечно, можно теперь удаление обрабатывать через split() - forEach() - join(), но это как-то не изящно...

Помимо replace у строк есть еще и другие методы. ;)
https://javascript.ru/string/indexof
https://javascript.ru/String/substring

Цитата:

Сообщение от Storm03
Есть ли какой-нибудь способ сделать replace что-то типа replace(s+"*;", "")?

Не совсем понял что именно ты хочешь сделать? :-?
Ведь в переменной s у тебя искомое значение... Зачем тебе там символ *?

Storm03 16.10.2021 11:58

Цитата:

Сообщение от ksa (Сообщение 540733)
Ведь в переменной s у тебя искомое значение... Зачем тебе там символ *?

В s не искомое значение, а только код товара. А количество и цену тогда придётся "выцарапывать" из goods_arr, чтобы собрать полностью искомое значение.

voraa 16.10.2021 12:10

А что такое код товара?

"UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;"

Что код товара "UT000018375", "Z0000001404" или "000018375" "0000001404"?

Storm03 16.10.2021 12:13

В результате получилось:
let arr = u.value.split(";");
arr = arr.filter(item => !item.includes(s));
u.value = arr.join(";");

В принципе, меня устраивает.

Storm03 16.10.2021 12:17

Цитата:

Сообщение от voraa (Сообщение 540736)
А что такое код товара?

"UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;"

Что код товара "UT000018375", "Z0000001404" или "000018375" "0000001404"?

Там двумерный массив:
Код_товара@количество@Цена; Код_товара@количество@Цена; Код_товара@количество@Цена;
И, когда удаляешь товар из таблицы, этот массив изменяется, строка из таблицы убирается.

Storm03 16.10.2021 12:34

Цитата:

Сообщение от Aetae (Сообщение 540731)
А собирать обратно в строку только когда это действительно понадобится.

Знаменитый анекдот, как программист кипятит чайник)))
1. Налить воды в чайник;
2. Зажечь газ;
3. Поставить чайник на газ.
А если в чайнике уже есть вода и газ включен?
Вылить воду из чайника, погасить газ и перейти к п.1.

ksa 17.10.2021 20:20

Цитата:

Сообщение от Storm03
как программист кипятит чайник

Не программист, а математик...

Цитата:

Сообщение от Storm03
Там двумерный массив:
Код_товара@количество@Цена; Код_товара@количество@Цена; Код_товара@количество@Цена;

Тогда, как вариант...
const str = "UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;"
const re = new RegExp('UT000020474' + '[^;]+?;')
alert(str.replace(re, ''))


Часовой пояс GMT +3, время: 08:00.