Задать вопрос
  • Регулярное выражение JS для замены тега и содержимого?

    Seasle
    @Seasle Куратор тега JavaScript
    Используйте DOM.
    const tempalte = `
    <span class="c56 c77 c98">текст</span>
    <span class="c101">текст</span>
    <span class="c111">текст</span>
    <span class="c12 c30 c98">текст</span>
    `;
    
    const parser = new DOMParser();
    const root = parser.parseFromString(tempalte, 'text/html');
    
    root.querySelectorAll('.c77, .c98, .c101').forEach((element) => {
        const content = document.createElement('b');
        content.append(...element.childNodes);
        element.replaceWith(content);
    });
    
    console.log(root.body.innerHTML);
    /*
    <b>текст</b>
    <b>текст</b>
    <span class="c111">текст</span>
    <b>текст</b>
    */

    Регулярками примерно так

    const template = `
    <span class="c56 c77 c98">текст</span>
    <span class="c101">текст</span>
    <span class="c111">текст</span>
    <span class="c12 c30 c98">текст</span>
    `.trim();
    const classNames = ['c77', 'c98', 'c101'];
    
    let result = template;
    for (const className of classNames) {
        const expression = new RegExp(`<([\\w-]+)\\s*class=".*${className}.*"\\s*>(.+)</\\1>`, 'gm');
        result = result.replace(expression, (match, tag, content) => `<b>${content}</b>`);
    }

    или
    const classNames = ['c77', 'c98', 'c101'];
    const expression = new RegExp(`<([\\w-]+)\\s*class=".*(${classNames.join('|')}).*"\\s*>(.+)</\\1>`, 'gm');
    const result = template.replace(expression, (match, tag, className, content) => `<b>${content}</b>`);

    Ответ написан
    1 комментарий
  • Какой Линукс подойдет для этого компьютера?

    ValdikSS
    @ValdikSS
    У вас 32-битный процессор? Из современных именитых x86 32-битных дистрибутивов осталось только два: Debian и OpenSUSE Tumbleweed. Остальные либо еще формируют 32-битные пакеты, но не выпускают установочные .iso (а значит, никто эти пакеты не проверяет), либо вовсе не собирают x86, либо многие пакеты в них сломаны, как в ArchLinux32.

    Рекомендую вам попробовать с Debian 12 (bookworm, в данный момент в testing), т.к. он достаточно свежий, а главное — в нём свежее ядро, в котором решена давняя проблема Linux — зависание при недостатке памяти.
    После установки, выполните следующие команды, чтобы увеличить отзывчивость:

    sudo apt install zram-tools
    sudo sed -i 's/^#PERCENT=.*/PERCENT=150/' /etc/default/zramswap
    echo 'w-      /sys/kernel/mm/lru_gen/enabled          -       -       -       -       y' | sudo tee /etc/tmpfiles.d/mglru.conf
    echo 'w-      /sys/kernel/mm/lru_gen/min_ttl_ms       -       -       -       -       1000' | sudo tee -a /etc/tmpfiles.d/mglru.conf


    Перезагрузитесь, затем пробуйте пользоваться системой.

    Если же у вас Pentium 4 из более поздних поколений, то можете установить 64-битный дистрибутив, из выбор значительно шире. См. статью по ссылке выше.
    Ответ написан
    Комментировать
  • Варианты символов тире?

    HardBot
    @HardBot
    back-end, front-end developer
    split(/[—,–,−,-,_,-]/g)
    Ответ написан
    7 комментариев
  • После того, как винда загрузила свои обновления появилось это?

    @Drno
    удалить приложение
    Ответ написан
    Комментировать
  • После того, как винда загрузила свои обновления появилось это?

    Удали myasus
    Ответ написан
    Комментировать
  • Ютуб-канал Simple Сode может ли научить яп C#?

    Если ты просто смотришь видосы - точно не научишься.
    Если практикуешься ещё отдельно от них, то шансы уже есть
    Ответ написан
    Комментировать
  • Как раздать каждой виртуалке свой домен имея один белый IP?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ставьте nginx на proxmox, и обратнопроксируйте внутрь виртуалок в зависимости от server_name.

    Или второй вариант, nginx принимает коннекты на стандартном 80-ом порту, а потом в зависимости от доменного имени редиректит на домен1:8080, домен2:8081, и т.д. А уже эти порты напрямую прокинуты внутрь виртуалок. Nginx тоже может быть в какой-нибудь из виртуалок, главное 80-ый порт завести в неё.
    Ответ написан
    Комментировать
  • Как добавить класс active, когда слайд активен?

    Nolis
    @Nolis
    it-гопник
    для начала нужно создать массив слайдов, потом сгенерить на его основе DOM.
    const slides = [
    { id: 0, img: 'путь', active: true },
    { id: 1, img: 'путь', active: false }
    ]
    После нажатия кнопки перехода, делай новый слайд активным, а все остальные переводи в active: false
    Другой вариант: тык
    Ответ написан
    Комментировать
  • Почему не работает?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    if(!message.content.includes(settings.greetingMessageText) && !message.content.includes(autoRespData[i].command)) {
    Ответ написан
    2 комментария
  • Как округлить тысячные?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    окей гугл, js округление до десятых
    Ответ написан
    Комментировать
  • Как округлить тысячные?

    Если число больше тысячи, то делим его на тысячу, либо сотни и приписываем к строке " тыс.".
    Если чисто больше миллиона, то делим его на миллион и получаем цифру 1 и приписываем к ней " млн.".

    Думаю логика понятна, пишите её сами. Ведь вы хотите чему то научится, а не чтобы за вас делали работу.

    UPD!
    По случайности мне пришлось написать аналогичное, мне необходимо было округлять большие суммы в тысячи, миллионы и т.д. Я решил, что будет полезно поделится этим с вами.

    Написал небольшую функцию, выглядит следующим образом:
    function num(number) {
        function number_format(number, decimals, dec_point, thousands_sep) {
            number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
            let n = !isFinite(+number) ? 0 : +number,
                prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
                sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
                dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
                s = '',
                toFixedFix = function (n, prec) {
                    let k = Math.pow(10, prec);
                    return '' + Math.round(n * k) / k;
                };
    
            s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
            if (s[0].length > 3) {
                s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
            }
            
            if ((s[1] || '').length < prec) {
                s[1] = s[1] || '';
                s[1] += new Array(prec - s[1].length + 1).join('0');
            }
            
            return s.join(dec);
        }
    
        if (number <= 9999 && number >= -9999)  {
            return number_format(number, 0, '.', '');
        } else if(number <= 999999 && number >= -999999){
            return number_format(number/1e3, 2, '.', '') + ' тыс. ';
        } else if(number <= 999999999 && number >= -999999999){
            return number_format(number/1e6, 2, '.', '') + ' млн. ';
        } else {
            return number_format(number/1e9, 2, '.', '') + ' млрд.';
        }
    }


    Вызывается соответственно `num(integral/float)`
    Ответ написан
    1 комментарий
  • Как реализовать очередь в node js?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если в стеке технологий у вас стоит Redis - то можно его использовать для очереди
    https://redis.com/redis-best-practices/communicati...
    Ответ написан
    Комментировать
  • Как задать путь для установки программы, у которой отсутствует эта возможность?

    Нет, но возможно что в тех программах на самом деле есть возможность выбрать путь установки.
    Ещё можно попробовать уже после установки перенести файлы и сделать симлинк
    Ответ написан
    2 комментария
  • Как сделать фон внутри текста?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    Ответ написан
    Комментировать
  • Как реализовать очередь в node js?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Как правильнее было бы реализовать это?

    Не изобретать велосипед, а погуглить готовые решения для очередей.
    Беглый поиск:
    https://www.npmjs.com/package/queue
    https://github.com/bee-queue/bee-queue
    https://levelup.gitconnected.com/how-to-implement-...
    Ну и всякие там rabbitmq и т.п.
    Ответ написан
    1 комментарий
  • Как увеличить FPS в системе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как увеличить FPS в системе?

    Ты уже задавал этот вопрос в комментариях к предыдущему вопросу, там есть ответ:

    Основной способ стандартный -- не перерисовывать всё, если можно этого избежать.

    Нет нужды перерисовывать весь интерфейс в бэк-буфере, если ничего не изменилось кроме положения мыши. Указатель мыши вообще можно рисовать прямо во фрейм-буфере, когда он перемещается копировать маленький квадратик из бэк-буфера и рисовать стрелку в новом месте.
    Ответ написан
  • Скачивания файлов (в браузере) с FTP сервера через VPS?

    @rPman
    ftp худший способ, работает медленно, веб сервером не поддерживается
    купил FTP сервер
    где же такой ужас нашел
    p.s. fuse mount будет глючить, проверено, любой косяк даже малейший с сетью до ftp и вся машина висит и ожидает таймаут.

    Ищи способ раздачи файлов по http, тогда nginx поддерживает проксирование, в т.ч. с авторизацией

    При наличии полноценной vps-ки можно настроить nfs, не самый лучший способ (возможно я плохо настраивал, у меня было медленно) зато универсально и из коробки поддерживается всеми linux

    Я помню настраивал nbd сетевое блочное устройство (можно ограничить доступ по ip адресам через фаервол) это было самое быстрое решение (не нагружает ни сервер ни клиент, никаких лишних накладных расходов так как доступ монопольный), все можно красиво кешировать на принимающей стороне средствами ОС, недостаток - лучше при плохой связи не монтировать на запись (считай диск выдергиваешь во время записи) ну и конечно это блочное устройство с монопольным доступом, на принимающей стороне его нужно монтировать а для обслуживания (если нужна запись) отключать, т.е. останавливать работу.

    Полностью аналогичное nbd решение - это iscsi сервер (на linux рекомендую использовать istgt, очень простая и легкая реализация, другие кушают процессор), в этом случае его может подключить и windows машина.

    Так вот главный момент, подключив медленное блочное устройство в linux можно поверх него добавить кеширование на локальный диск меньшего размера, например с помощью универсального bcache (есть еще старый lvcache), так же файловая система zfs умеет штатно кеширующие устройства для кеша на чтение. В общем возможности очень гибкие.
    Ответ написан
    4 комментария
  • Почему мощность колонок указывают в Ваттах если единица громкости - Децибелл? Можете осветить это в контексте чувствительности колонки?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    лол не покупайтесь на PMPO. 20 ИЛИ 50 ватт это гробик на 6-20 кг.
    Причем это современная колонка с ниодимом.
    В общем физика она никуда не уходит.
    Ответ написан
    Комментировать
  • Как объединить два объекта с одинаковыми ключами?

    Seasle
    @Seasle Куратор тега JavaScript
    const keys = new Set(
      Object.values(data)
        .map((entry) => Object.keys(entry))
        .flat()
    );
    const properties = Object.keys(data).map((key) => [
      key.split("_").shift(),
      key,
    ]);
    
    const result = [...keys].reduce((acc, key) => {
      acc[key] = Object.fromEntries(
        properties.map(([property, type]) => [property, data[type][key] ?? 0])
      );
    
      return acc;
    }, {});

    Другие варианты

    const mappedData = Object.entries(data).reduce((acc, [type, entry]) => {
        const property = type.split('_').shift();
        for (const key in entry) {
            acc[key] = { ...acc[key], [property]: entry[key] };
        }
        return acc;
    }, {});
    console.log(mappedData);
    /* 
    {
        "Машины и оборудование прочие, не включенные в другие группировки": {
            "active": 1,
            "inactive": 2
        },
        "Насосное оборудование, комлектующие, сопутствующие": {
            "active": 1,
            "inactive": 2
        },
        "Электродвигатели, генераторы и трансформаторы силовые": {
            "active": 1,
            "inactive": 2
        },
        "Средства транспортные прочие, не включенные в другие группировки": {
            "active": 1
        }
    }
    */

    или
    const result = {};
    const propertyMap = Object.fromEntries(Object.keys(data).map((key) => [key.split('_').shift(), key]));
    for (const property in propertyMap) {
        for (const key in data[propertyMap[property]]) {
            result[key] ??= {};
            result[key][property] = data[propertyMap[property]][key];
        }
    }
    for (const key in result) {
        for (const property in propertyMap) {
            if (property in result[key] === false) {
                result[key][property] = null;
            }
        }
    }
    console.log(result);
    /*
    {
        "Машины и оборудование прочие, не включенные в другие группировки": {
            "active": 1,
            "inactive": 2
        },
        "Насосное оборудование, комлектующие, сопутствующие": {
            "active": 1,
            "inactive": 2
        },
        "Электродвигатели, генераторы и трансформаторы силовые": {
            "active": 1,
            "inactive": 2
        },
        "Средства транспортные прочие, не включенные в другие группировки": {
            "active": 1,
            "inactive": null
        }
    }
    */

    Ответ написан
    3 комментария