ДействиеСценарий / Говнокод #17938 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 kyzi007, (Updated )

Комментарии (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{...} и иже с ним, и нет плюшек типа пристроек к сараю, как в сисярпе, позволяющих парсить рекурсивные выражения, но все-таки по сравению с ж.скриптом, у АС тут лучше.)

            А, и еще в АС есть именованые группы.
            Ответить
            • А где их нету? Самое смешное что баннер уже готов, и шансов что я что то поправлю ноль.
              Ответить
              • var re = /(?P<foo>x)/g;
                SyntaxError: Invalid regular expression: /(?P<foo>x)/: Invalid group
                    at new RegExp (<anonymous>)
                    at repl:1:1
                    at REPLServer.self.eval (repl.js:110:21)
                    at repl.js:249:20
                    at REPLServer.self.eval (repl.js:122:7)
                    at Interface.<anonymous> (repl.js:239:12)
                    at Interface.EventEmitter.emit (events.js:95:17)
                    at Interface._onLine (readline.js:202:10)
                    at Interface._line (readline.js:531:8)
                    at Interface._ttyWrite (readline.js:767:16)
                Ответить
            • >>А, и еще в АС есть именованые группы.

              в жс нет? я регэспы в основном на шарпе юзал, там это в порядке вещей.
              Ответить
            • >>смотрящие обратно
              это называется "ретроспективная проверка"
              Ответить
          • >> и так их понять и не смогла.
            почитай книжку с совами от orielly. Mastering regular expressions называется.

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

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

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

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

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

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

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8