1. ActionScript / Говнокод #17938

    −163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    private function parse (val : String) : Object {
        while (val.indexOf(' ') != -1) {
            val = val.replace(' ', '')
        }
        if (val.indexOf(',') != -1) {
            var params : Array = val.split(',')
            if (params[0] != 'auto') {
                params[0] = [parseInt(params[0]), /(px|%)/.exec(params[0][1])]
            }
            if (params[1] != 'auto') {
                params[1] = [parseInt(params[1]), /(px|%)/.exec(params[1])[1]]
            }
            return params
    
        } else if (val == 'contain' || val == 'cover') {
            return val
        }
        return null
    }

    Да блять, я не осилила разобрать строку типа "10px,auto"

    Запостил: kyzi007, 05 Апреля 2015

    Комментарии (26) RSS

    • >>> re.findall('(auto|\d+px|%),(auto|\d+px|% )|(cover|contain)', '10px,auto')
      [('10px', 'auto', '')]
      >>> re.findall('(auto|\d+px|%),(auto|\d+px|% )|(cover|contain)', 'cover')
      [('', '', 'cover')]
      Если что.
      Ответить
    • Но как столько боли могло вылиться в такой маленький кусочек кода?

      > while (val.indexOf(' ') != -1)
      А нельзя val = val.replace(/ /g, '') как в жс?

      > Если что.
      И так тоже нельзя?
      Ответить
      • Так нельзя... Как заменить несколько пробелов за один раз я не знаю )
        Совесть успокаивает что это таки баннер.
        Ответить
        • Это из-за человеческого фактора ("у нас в конторе не понимают регулярок - не пиши их") или ActionScript какой-то старый?
          Ответить
          • Когда я на флеше писала я их не юзала да и особо не надо было. А счас сильно удивилась когда узнала как они во флеше работают и так их понять и не смогла. По сути можно было бы и не идти этим путем но я хотела чтобы сеттинги можно было задавать красиво и вместо 3 параметров сделала строку)

            А что касается ас - он не старый, он убогий
            Ответить
            • > А счас сильно удивилась когда узнала как они во флеше работают и так их понять и не смогла.
              А то у меня в жс Ваши питонячьи регулярки работают
              /(auto|\d+px|%),(auto|\d+px|% )|(cover|contain)/.exec('10px,auto')
              ["10px,auto", "10px", "auto", undefined]
              /(auto|\d+px|%),(auto|\d+px|% )|(cover|contain)/.exec('cover')
              ["cover", undefined, undefined, "cover"]

              И в документации по AS3 написано, что exec Returns Object — If there is no match, null <...> otherwise <...> element 0 contains the complete matching substring, and other elements of the array (1 through n) contain substrings that match parenthetical groups in the regular expression.
              И в String.replace был пример на replace(/pitux/g, ...) для замены всех питухов.
              Т.е. если AS3, то всё должно работать так же красиво.
              Ответить
            • Вот уж неправда... По сравнению с ж.скриптовыми регулярками у нас есть незахватывающая группа смотрящая обратно, т.е. (<=...), которая в ж.скрипте не работает.
              И вообще, из того, что сделано в АС, регулярки, пожалуй, одна из более вменяемых вещей. (Увы, полной позикс спецификации нет, как нет и всяких \P{...} и иже с ним, и нет плюшек типа пристроек к сараю, как в сисярпе, позволяющих парсить рекурсивные выражения, но все-таки по сравению с ж.скриптом, у АС тут лучше.)

              А, и еще в АС есть именованые группы.
              Ответить
            • >> и так их понять и не смогла.
              почитай книжку с совами от orielly. Mastering regular expressions называется.

              Будешь потом сыпать регулярными выражениями куда ни попадя, все коллеги тебя проклянут, а потом ты напишешь регулярку с экспоненциальной сложностью(aka backtracking) и всё
              Ответить
      • Лучше все-таки val.replace(/\ +/g, ''), так меньше замен будет.
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Той не разполагаше със сигурни сведения, нито пък имаше дори и смътно предчувствие, че корабът, с който му предстоеше да се срещне, беше „Златната кошута“, командван от неуморния морски вълк на Англия, Франсис Дрейк, който стоеше на квартердека и спокойно наблюдаваше Де Антон през един телескоп със студения поглед на акула, следваща кървава диря.

          — Страшно любезно от негова страна, че обърна, за да ни посрещне — промърмори Дрейк, дребен, приличащ на петел за борба, мъж с малки кръгли очи, къдрава тъмночервена коса и жълтеникавочервена брада, завършваща с остър връх под дълги увиснали мустаци.

          — Най-малкото, което би могъл да стори, след като през изминалите две седмици неотклонно го следвахме по петите — отвърна Томас Кътил, шкипер на „Златната кошута“.

          — Вярно, ала плячката си струва преследването.
          Ответить
          • показать все, что скрытоОн није имао поуздане информације, нити су имали чак и нејасну визију да је брод, који је био упознати био 'Голден Хинд "командовао неуморног мора вук Енглеске, Францис Драке, који је стајао на Куартердецк и тихо гледала децембар Антон кроз телескоп са хладним очима ајкуле следећих траг крви.

            - Ужасно љубазно од њега, то се испоставило да нас поздраве - промрмљао је Дрејк мали, као што пенис борби, човек са малим округлим очима, коврџавом тамно црвеном косом и брадом пешчане завршава у оштром тачке у дугом висећи бркове.

            - Најмање је могао да уради након што је провео последње две недеље стално за петама - рекао је Катина Томас, водитељ "Голден Хинд".

            - Тачно, али плен вреди јурити.
            Ответить

    Добавить комментарий