ЙажаСценарий / Говнокод #21969 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
function nodash (s) {
  var re = /(.*)-(.*)-(.*)-(.*)-(.*)/;
  var a = re.exec(s);
  return a[1] + a[2] + a[3] + a[4] + a[5];
}

A typical filename in the system: 628f1ff3-0c96-4f4a-84a3-f5e29de2dfab.jpeg
Experienced Unity developer writes a function to remove hyphens (props for naming) from the filename. Wow

Запостил: eternalko eternalko, (Updated )

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

  • Да, забавно наверное пооучилось когда попалось имя без букв. К такому Unity его не готовил.
    Ответить
    • Слаботипизированный питух стоит на страже и ждёт своего часа, чтобы клюнуть.
      Ответить
    • Безопасная версия четвёртой строки:
      return "" + a[1] + "" + a[2] + "" + a[3] + "" + a[4] + "" + a[5] + "";
      Ответить
      • Что? Регулярки возвращают строки или undefined в случае условной группофигни вроде /(.+)?/ В нашем случае либо exec вернёт null, либо будет пять строк (возможно, пустых). Сумма, где хоть один операнд - строка - строка (а у нас оба операнда строки).
        Слаботипизированный питух стоит на страже и ждёт своего часа, чтобы помочь.
        Ответить
        • > либо exec вернёт null, либо будет пять строк (возможно, пустых)
          > ждёт своего часа, чтобы помочь.

          Лул, Cannot read property '1' of null. Шпасибки, динамический питушок, выручил.
          Ответить
          • Мда... Всё падает как в лучших домах питона.
            Ну а как вообще без null определить, что шаблон не натянулся?

            Хотя, надо бы опцию вводить "матчить всё, что можно, пустые строки, если не заматчилось". В случае простых регулярок как в нашем случае бы сильно помогло разработке.
            Ответить
            • "Полезный" динамопитух, кмк, должен выглядеть как-то так (ахтунг, браузерозависимые расширения)
              var EmptyArray = new Proxy({}, {
                get: function(proxy, name) {
                  return '';
                }
              });
              
              function rexec(regex, str) {
                var result = regex.exec(str);
                return (result == null) ? EmptyArray :
                    new Proxy(result, {
                      get: function(res, name) {
                        if (name in res) return res[name];
                        return '';
                      }
                    });
              }
              Ответить
              • Надо бы только index, input, length в EmptyArray добавить, чтоб ничего не падало. И ещё, возможно, флаг(и) matched/fullyMatched во все результаты.

                Отдельный вопрос - что делать в пустом случае при for(x=1; x<result.length; x++).

                Ну и как undefined отличать от '', если мы вздумали запоминать, возможно, пустые префиксы/постфиксы:
                > /\d(\d*)|A(\d*)$/.exec('3')
                ["3", "", undefined]
                > /\d(\d*)|A(\d*)$/.exec('A')
                ["A", undefined, ""]
                Ответить
          • Запустил код в браузере, re.exec("----") вернуло Array [ "----", "", "", "", "", "" ].
            Никакого нулла нету.

            Блин, не так понял коммент. Снимаю возражение.
            Ответить
  • function nodash2 (s) {
      var re = /(.*)-(.*)-(.*)-(.*)-(.*)-(.*)/;
      var a = re.exec(s);
      return a[1] + a[2] + a[3] + a[4] + a[5] + a[6];
    }
    //
    function nodash4 (s) {
      var re = /(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)/;
      var a = re.exec(s);
      return a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8];
    }


    А потом он уволился
    Ответить
    • function nodashN (s, n) {
        n += 4;
        var r = ""
        for (var i = 0; i < n - 1; i++) {
            r += "(.*)-";
        }
        r += "(.*)";
        var re = new RegExp(r);
        var a = re.exec(s);
        var res = ""
        for (var i = 1; i <= n; i++) {
            res += a[i];
        }
        return res;
      }

      [/color]
      Ответить

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

Где здесь C++, guest?!

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


    8