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+"*;", "")? |
Есть, но это некрасиво и чревато.
Лучше таки делать split и хранить в виде массива. Удалять тоже из массива. А собирать обратно в строку только когда это действительно понадобится. Это надёжно и явно. |
Цитата:
|
Цитата:
https://javascript.ru/string/indexof https://javascript.ru/String/substring Цитата:
Ведь в переменной s у тебя искомое значение... Зачем тебе там символ *? |
Цитата:
|
А что такое код товара?
"UT000018375@5@12;UT000020474@1@150;UT000026718@20 @58;Z0000001404@10@456;" Что код товара "UT000018375", "Z0000001404" или "000018375" "0000001404"? |
В результате получилось:
let arr = u.value.split(";"); arr = arr.filter(item => !item.includes(s)); u.value = arr.join(";"); В принципе, меня устраивает. |
Цитата:
Код_товара@количество@Цена; Код_товара@количество@Цена; Код_товара@количество@Цена; И, когда удаляешь товар из таблицы, этот массив изменяется, строка из таблицы убирается. |
Цитата:
1. Налить воды в чайник; 2. Зажечь газ; 3. Поставить чайник на газ. А если в чайнике уже есть вода и газ включен? Вылить воду из чайника, погасить газ и перейти к п.1. |
Цитата:
Цитата:
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, время: 09:34. |