Как научить BAS переделывать строку



  • Всем добрый день

    BAS получает текст размером 16 символов с цифрами и буквами и каждые 4 символа должен быть тире и все буквы должны быть большими но может произойти ситуация когда: Буквы будут маленькими или место тире будет пробел или вообще весь текст будет без тире и разделений что тогда делать?

    Пример

    Мне нужен типа такой текст 9M9J-WDRB-HQ39-HQP1
    Но может появится или такой 9M9J WDRB HQ39 HQP1
    Или такой 9M9JWDRBHQ39HQP1
    Или такой 9m9j-wdrb-hq39-hqp1
    Ну или комбинация этих "ошибок"
    (это только пример)

    Что вы посоветуете мне сделать?



  • @nikalasss Использовать регулярное выражение



  • @denis_krsk Я нечего не понимаю в регулярных выражениях :(



  • @nikalasss Вот исчерпывающая статья в вики https://ru.wikipedia.org/wiki/Регулярные_выражения Какой результат нужен на выходе?



  • @denis_krsk Нужно чтобы из всех этих результатов:
    9M9J WDRB HQ39 HQP1
    9M9JWDRBHQ39HQP1
    9m9j-wdrb-hq39-hqp1
    И ихних комбинаций, выход результат 9M9J-WDRB-HQ39-HQP1
    (это пример, текст может быть из других букв и цифр)



  • @nikalasss said in Как научить BAS переделывать строку:

    9m9j-wdrb-hq39-hqp1

    В выполнить код используйте этот код ( на кубиках писать мне лень)

    var str='9m9j-wdrb-hq39-hqp1'; //Строка в которой ищем
    var regEx=/(?:^|\s)(\S{4,4})[\s-]?(\S{4,4})[\s-]?(\S{4,4})[\s-]?(\S{4,4})(?:\s|$)/;
    var text=str.match(regEx);
    if(text.length==5){
    	text=text.slice(1).join('-').toUpperCase();
    	log(text)
    }else{
    	log('Строка '+str+' не подходит под регулярное выражение')
    };
    


  • @denis_krsk А как мне его добавить в скрипт? Я не знаю Java xD



  • @nikalasss В выполнить код копируете все это.
    Ваша строка [[YOUR_STRING]] - ставите свою переменную из БАСа.

    var str=[[YOUR_STRING]]; //Строка в которой ищем
    var regEx=/(?:^|\s)(\S{4,4})[\s-]?(\S{4,4})[\s-]?(\S{4,4})[\s-]?(\S{4,4})(?:\s|$)/;
    var text=str.match(regEx);
    if(text && text.length==5){
       [[YOUR_STRING]]=text.slice(1).join('-').toUpperCase();
       log([[YOUR_STRING]])
    }else{
       log('Строка '+str+' не подходит под регулярное выражение')
    };
    

    Кстати это не Java, а JavaScript :)



  • @Denis_krsk Появляется ошибка TypeError: Result of expression 'text' [null] is not an object



  • @nikalasss Подредактировал код, а вообще видимо строка не подошла под регулярку.



  • @denis_krsk
    по частям собрать искомое убирая по одной ошибки
    через редактор переменных заменить " " на "-"
    уcтановить переменную [[YOUR_STRING]].touppercase
    если в [[YOUR_STRING]]НЕ найден "-"
    то ммм...разобрать регуляркой по 4 в список
    /d/d/d/d кажеца, че там буква, забыл
    форич этот список
    установить форич дату в [[форич_дата]]-
    добавить ее в другой список
    после цикла список сложить в строку
    в конце готовой переменной будет лишний дефис.
    регулярки можно запускать с конца, гугль в помощь
    или удалить последний символ яваскриптом.
    на нем же лучше все и написать, ради компактификации



  • @viktor Покурил чтоли?...


Log in to reply