ReGexp какой то неправельный

Поддержка
  • Need help :) НЕ могу понять тли руки у меня не стого места растут толи как то неправильно работает ReGexp в BAS

    Есть такой код

    var re = new RegExp("/%(\d+)%/");
    var macro = "%2%Test2";
    if(re.test(macro)){
        var time = macro.match(re);
        VAR_MESSAGE_TIMEOUT = parseInt(time[1]);
    } else {
        VAR_MESSAGE_TIMEOUT = 0;
    }
    VAR_MESSAGE_TEXT = macro.replace(re, "");
    VAR_MESSAGE_ARRAY.splice(0, 1);
    

    Задача его очевидна, взять первое значение из массива, проверить есть ли макос с цифровым значением в нем (прим. %2%) если есть то выдернуть значение и присвоить переменной BAS если нет присвоить ей 0

    Так вот, регулярка правильна, в браузере этот код отрабатывает а вот в BAS нет... Получаю всегда false при re.test(macro) а если убераю условие if вообще получаю критическую ошибку О_О почему?

  • @fox said in ReGexp какой то неправельный:

    @Qwaros
    0_1548266986600_2f5b1339-825c-452a-9aac-73fb5eac6632-изображение.png

    Штука в том что не работает ни так ни этак. забыл написать про второй вариант ) Пробовал его так же

  • @qwaros Я сейчас занят, но я люблю регулярки :D. Скинь тестовый массив [[MESSAGE_ARRAY]].

  • @fox said in ReGexp какой то неправельный:

    @qwaros Я сейчас занят, но я люблю регулярки :D. Скинь тестовый массив [[MESSAGE_ARRAY]].

    ["Test1", "%2%Test2", "3Test3", "%5%Test-4"]
    
  • @Qwaros У вас неправильный регексп, для чего нужны эти слэши?
    new RegExp("/%(\d+)%/");

    паттерн для конструктора RegExp нужно предоставлять в виде строки экранируя только обратные слеши ( \\ )

    var re = new RegExp("%(\\d+)%")
    

    Либо использовать литеральный формат:

    var re = /%(\d+)%/
    

    тогда обратные слешы можно не экранировать.


    [[MESSAGE_ARRAY]] = ["Test1","%2%Test2","3Test3","%5%Test-4"]
    //var re = new RegExp("%(\\d+)%");
    var re = /%(\d+)%/
    var macro = "%2%Test2";
    if(re.test(macro)){
        var time = macro.match(re);
        VAR_MESSAGE_TIMEOUT = parseInt(time[1]);
    } else {
        VAR_MESSAGE_TIMEOUT = 0;
    }
    VAR_MESSAGE_TEXT = macro.replace(re, "");
    log([[MESSAGE_TEXT]])
    log(VAR_MESSAGE_ARRAY.splice(0, 1))
    
  • @fox said in ReGexp какой то неправельный:

    @Qwaros У вас неправильный регексп, для чего нужны эти слэши?
    new RegExp("/%(\d+)%/");

    паттерн для конструктора RegExp нужно предоставлять в виде строки экранируя только обратные слеши ( \\ )

    var re = new RegExp("%(\\d+)%")
    

    Либо использовать литеральный формат:

    var re = /%(\d+)%/
    

    тогда обратные слешы можно не экранировать.


    [[MESSAGE_ARRAY]] = ["Test1","%2%Test2","3Test3","%5%Test-4"]
    //var re = new RegExp("%(\\d+)%");
    var re = /%(\d+)%/
    var macro = "%2%Test2";
    if(re.test(macro)){
        var time = macro.match(re);
        VAR_MESSAGE_TIMEOUT = parseInt(time[1]);
    } else {
        VAR_MESSAGE_TIMEOUT = 0;
    }
    VAR_MESSAGE_TEXT = macro.replace(re, "");
    log([[MESSAGE_TEXT]])
    log(VAR_MESSAGE_ARRAY.splice(0, 1))
    

    руки с жопы... понял :D Спасибо :)))