しるてく

技術的な話をします

javascriptのreplaceでまとめて置換する

たとえば、

/path/to/:category/:typeみたいなのがあったときに{ category: 'hoge', type: 'fuga' }をわたしてあげると/path/to/hoge/fugaにして欲しいなってとき。

replaceの引数にfuctionが使えるので、

  var path = '/path/to/:category/:type'
  var params = {
    category: 'hoge',
    type: 'fuga'
  }
  path = path.replace(/\:([^\/]*)/g, function(all, group) { return params[group]; });

みたいなことができる。


backboneを使っていてのっぴきならない理由で/path/to?category=hoge&type=fugaのようにparamsを使えない時に/path/to/hoge/fugaさせるために使った。

    fetch: function(options) {
      options = options ? _.clone(options) : {};
      var data = options.data;
      delete options.data;

      this.url = this.url_tmpl;
      if (data) {
        this.url = this.url.replace(/\:([^\/]*)/g, function(all, group) { return data[group]; });
      }
      return Backbone.Collection.prototype.fetch.call(this, options);
    },