/**
* Изменяет по шаблону все найденные совпадения
* @param htmlcode страница которую нужно изменить
* @param listReplace список значений для изменения найденных
* @param pattern паттерн регулярное выражения поиска
* @param globalFind нужно ли изменять все значения или только одно
* @returns {*|string|void} возращаяет изменненный текст html документа
*/
function replaceToken(htmlcode, listReplace,pattern, globalFind = true) {
/**
* Получает список токенов, которыми нужно заменить
* Возращает заряженный генератор с списком по порядку выражений замены,
* каждый раз будет возращать новое значение замены, список может быть прислан с сервера,
* в случаее если найденных значений будет больше, то он не чего не измениn. Выражение "$&"
* не изменяет найденое вхождение
* @param list_tokens - массив- список значений которыми нужно заменить всякие 0x23423j343/
* @returns {{generator: generaterSReplace}} возвращает генератор, который каждый раз будет возвращать следующие значения для замены
*/
function loadGenerator(list_tokens) {
return {
generator: function* generaterSReplace() {
for(let i=0; i<list_tokens.length;i++)
yield list_tokens[i];
return "$&";
}
}
}
let generator=loadGenerator(list_tokens).generator();
let reg;
if(globalFind || listReplace instanceof Array)
reg =new RegExp(pattern,["mg"]);
else
reg=new RegExp(pattern,["m"]);
return res =htmlcode.replace(reg,function(str1,str2){
return str1.replace(str2,generator.next().value);
});
}/****************TEST-------------------------TEST***********************************/
var list_tokens=["1234567890","0987654321"]; // значения для замены, то есть html документ к примеру шаблон присланный с сервера или исходный текст самой страницы к примеру
// var htmlCode;
// $.get(document.location.href, function(data){htmlCode=data.data});
let html='разные там <b>html</b>елементы. А вот и трока поиска: </b><b id="finish_kar_cri">0x61496a395F549XzxzxZ</b>....' +
'a вот еще один такой же элемент(предположим что там class а не id для массового поиска)'
+'<b id="finish_kar_cri">0x323232323</b>...';
let pattern='<b id="finish_kar_cri">(\\w+)</b>'; // ваша строка поиска в скобках значениыя ддля замены
var res=replaceToken(html,list_tokens,pattern); // возвращаем имененную строку
$(document).append(res); // console.log(res)// результат, измененная текст с вашим токеном
// token[1] - и будет найденным текстом
var ell=$("#finish_kar_cri");
var lastVal=ell.text(); // запомнили старое значение
ell.text("8496444");
SELECT a.*, b.* , m.name AS manufacturer_name, s.name AS supplier_name
FROM ps_product a
LEFT JOIN ps_product_lang b ON (b.id_product = a.id_product AND b.id_lang = 4 AND b.id_shop = 1)
LEFT JOIN ps_manufacturer m ON (m.id_manufacturer = a.id_manufacturer)
LEFT JOIN ps_supplier s ON (s.id_supplier = a.id_supplier)
LEFT JOIN ps_stock_available sav ON (sav.id_product = a.id_product AND sav.id_product_attribute = 0 AND sav.id_shop = 1 AND sav.id_shop_group = 0 )
JOIN ps_product_shop sa ON (a.id_product = sa.id_product AND sa.id_shop = a.id_shop_default)
LEFT JOIN ps_category_lang cl ON (sa.id_category_default = cl.id_category AND b.id_lang = cl.id_lang AND cl.id_shop = a.id_shop_default)
LEFT JOIN ps_shop shop ON (shop.id_shop = a.id_shop_default)
LEFT JOIN ps_image_shop image_shop ON (image_shop.id_product = a.id_product AND image_shop.cover = 1 AND image_shop.id_shop = a.id_shop_default)
LEFT JOIN ps_image i ON (i.id_image = image_shop.id_image) LEFT JOIN ps_product_download pd ON (pd.id_product = a.id_product AND pd.active = 1)
WHERE 1 ORDER BY a.id_product ASC
CONCAT('https://',
-- get the shop domain
IFNULL(conf.value, 'undefined_domain'),
-- the path to the pictures folder
'/img/p/',
-- now take all the digits separetly as MySQL doesn't support loops in SELECT statements
-- assuming we have smaller image id than 100'000 ;)
IF(CHAR_LENGTH(pi.id_image) >= 5,
-- if we have 5 digits for the image id
CONCAT(
-- take the first digit
SUBSTRING(pi.id_image, -5, 1),
-- add a slash
'/'),
''),
-- repeat for the next digits
IF(CHAR_LENGTH(pi.id_image) >= 4, CONCAT(SUBSTRING(pi.id_image, -4, 1), '/'), ''),
IF(CHAR_LENGTH(pi.id_image) >= 3, CONCAT(SUBSTRING(pi.id_image, -3, 1), '/'), ''),
if(CHAR_LENGTH(pi.id_image) >= 2, CONCAT(SUBSTRING(pi.id_image, -2, 1), '/'), ''),
IF(CHAR_LENGTH(pi.id_image) >= 1, CONCAT(SUBSTRING(pi.id_image, -1, 1), '/'), ''),
-- add the image id
pi.id_image,
-- put the image extension
'.jpg') as image_url,
CONCAT('https://',
-- get the shop domain
IFNULL(conf.value, 'undefined_domain'),
-- the path to the pictures folder
'/img/p/',
-- now take all the digits separetly as MySQL doesn't support loops in SELECT statements
-- assuming we have smaller image id than 100'000 ;)
IF(CHAR_LENGTH(pi2.id_image) >= 5,
-- if we have 5 digits for the image id
CONCAT(
-- take the first digit
SUBSTRING(pi2.id_image, -5, 1),
-- add a slash
'/'),
''),
-- repeat for the next digits
IF(CHAR_LENGTH(pi2.id_image) >= 4, CONCAT(SUBSTRING(pi2.id_image, -4, 1), '/'), ''),
IF(CHAR_LENGTH(pi2.id_image) >= 3, CONCAT(SUBSTRING(pi2.id_image, -3, 1), '/'), ''),
if(CHAR_LENGTH(pi2.id_image) >= 2, CONCAT(SUBSTRING(pi2.id_image, -2, 1), '/'), ''),
IF(CHAR_LENGTH(pi2.id_image) >= 1, CONCAT(SUBSTRING(pi2.id_image, -1, 1), '/'), ''),
-- add the image id
pi2.id_image,
-- put the image extension
'.jpg') as image_url2,