Не подставляется переменная в регулярку



  • @Pragmatik В следующий раз выкладывайте строку к которой применяете код тоже.

    У меня BAS ругается на твою регулярку

    MY_PREFIX_[\s\S]+?:\s[\s\S]+)
    

    Так как не экранирована закрывающая скобка вконце

    MY_PREFIX_[\s\S]+?:\s[\s\S]+\)
    

    var ConfigString = "1234123MY_PREFIX_фыва: фывафывафывафыва  )"
    var RegExp1 = /MY_PREFIX_[\s\S]+?:\s[\s\S]+\)/
    var Result = RegExp1.test(ConfigString)
    log(Result) //true
    

    Если рег выражение создается через конструктор, то не надо оборачивать в /.../ т.к. там должна быть строка. И все спецсимволы в строке должны экранироваться \

    Долго я печатал :D

    var ConfigString = "1234123MY_PREFIX_фыва: фывафывафывафыва  )"
    var Prefix = "MY_PREFIX_"
    var RegExp1 = new RegExp(Prefix+"[\\s\\S]\+\?:\\s[\\s\\S]+\\\)","g")
    var Result = RegExp1.test(ConfigString)
    log(Result) //true
    


  • Да, все спецзнаки в переменной тоже должны быть экранированы.



  • @fox

    Спасибо, сработало. Теперь мои регулярки задаются так:
    0_1535275332165_configcode.jpg

    Ох и запарюсь скрипт переписывать и всё экранировать :) Но задумка того стоит.



  • @Pragmatik Регулярки всё таки странные, приведи пример данных к которым ты применяешь регулярку



  • @fox есть конфигурационный файл. В нём есть код, и есть комменты. У меня любая строка кода начинается с префикса, а любой коммент с решётки (#). Данный цикл работает в два этапа: первая регулярка отделяет код от комментов по преффиксу ( можно делать наоборот, исключать комменты по #, но думаю, удобнее так, в комменты тогда можно вообще что угодно вставлять безо всяких спецсимволов, главное, чтобы там преффикса не было ). А вторая регулярка уже берёт готовый код без преффикса. Данный цикл берёт из массива данных считанного построчно конфига все строки с кодом и формирует из них отдельный массив, чтобы работало быстрее. Далее по такому же принципу я нахожу по преффиксу нужный мне код в этом массиве и присваиваю нужным переменным. В итоге массив данных хранится в файле и считывается очень удобным образом. Удобнее базы данных, так как конфиги можно править в блокноте.



  • @fox пример строчек конфига:
    #Настройки прокси:
    VAR_AR_ACCOUNT_PROXY: http,185.232.168.40:9172,aAz6A7,FoP1fZ
    #Имя аккаунта:
    VAR_AR_ACCOUNT_NAME: David Miller
    #Логин аккаунта:
    VAR_AR_ACCOUNT_LOGIN: miller.david2015@yandex.ru
    #Пароль аккаунта
    VAR_AR_ACCOUNT_PASSWORD: K72+r/Q8iljkhz0r6B
    #Accept-Language аккаунта
    VAR_AR_ACCOUNT_LANGUAGE: ru-RU,ru;q=0.6,en-US,en;q=0.6
    #User-Agent аккаунта
    VAR_AR_ACCOUNT_USERAGENT: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 YaBrowser/18.6.1.770 Yowser/2.5 Safari/537.36
    И так далее... Ещё fibgerprint туда же запихнул и кучу логинов-паролей для разных сайтов, завязанных на этот профиль.



  • @fox как видишь, у меня преффикс (VAR_AR_ACCOUNT_) это часть имени переменной, в которую сохраниться этот код. Для удобства. А в конфиге записана вся переменная полностью (VAR_AR_ACCOUNT_PROXY).



  • @Pragmatik Прикольно, BAS работает по схожему принципу :D
    Я прибегаю к работе с файлами в отладочных версиях скрипта. Для быстрого теста необходимых узлов.


    Но объявлять переменные в конфиге черевато, так как дальше по скрипту ты эти переменные используешь, возможны ошибки.

    Хотя всё зависит от цели самого скрипта



  • @Pragmatik Или у тебя переменные уже объявлены, а значение из файла ищется по имени переменной?



  • @fox да в том-то и беда, что через eval невозможно объявить переменную чтобы она с нуля появилась в БАС. Я тупо считываю эти значения и через if подставляю нужной переменной нужное значение. Там же, в коде с if эти переменные впервые и появляются. Очень неудобно, если честно. Если бы был безопасный способ создать переменную через код, было бы круто, может ещё реализуют.



  • @pragmatik Храните свой конфиг в json в виде объекта и делов



  • @denis_krsk said in Не подставляется переменная в регулярку:

    Храните свой конфиг в json в виде объекта и делов

    Предлагаете преобразовать файл в json или же сам массив данных из файла для хранения в переменной?

    Я о таком не задумывался потому, что у меня в конфиге fingerprint хранится, а он уже в формате json. Json в json наврятли можно пережать.

    Впрочем, с такой идейкой можно и два файла сделать, один для конфигурации, второй для слепка браузера.



  • @pragmatik Если уж вы выбрали такой подход к хранению данных, то json самое правильное решение. JSON способ передачи объектов в виде строки. Потому вам некто не мешает создать сколько угодно сложный объект и хранить в нем все, в том числе и фингер принт.
    например:

    var config={
         name:'Ivan'
         commens:[
                'hi',
                'way'
                ],
        finger:fingerprint
    }
    
    //Потом в json
    var json=JSON.stringify(config);
    //Затем его записываете в файл
    //А после чтения
    var json=JSON.parse(file);
    //А потом распарсиваете его свойства
    var name=json.name;
    var commens=json.commens;
    var finger=json.fingerprint;
    
    


  • @denis_krsk, ну да, круто, та же база данных, только в одну строку) Попробую, спасибо за совет!


Log in to reply