query str parsing: regex vs split (v8)

Revision 8 of this benchmark created on


Description

http://stevenbenner.com/2010/03/javascript-regex-trick-parse-a-query-string-into-an-object/

Preparation HTML

<script>
  var query = 'http://your.domain/product.aspx?category=4&product_id=2140&query=lcd+tv';
  
  function split() {
    var queryString = {};
    query.split("?").pop().split("&").forEach(function (prop) {
      var item = prop.split("=");
      queryString[item[0]] = item[1];
    });
    return queryString;
  }
  
  function splitFor() {
    var queryString = {},
        parts = query.split("?").pop().split("&"),
        i = 0, l = parts.length, item;
  
    for (; i < l; i++) {
      item = parts[i].split("=");
      queryString[item[0]] = item[1];
    }
    return queryString;
  }

function splitI(s, chars) {
        var r = [];
        var index = 0;
        var i = 0;
        var soFar = 0;
        for (; s[i]; i++) {
                if (chars.length == 1) {
                        if (s[i] == chars) {
                                r.push(s.substr(index, i - index));
                                index = i + 1;
                        }
                }
                else {
                        //if (s[i] == chars[soFar]) {

                        //}
                }
        }

        if (i > index) {
                r.push(s.substr(index, i - index));
        }

        return r;
}

function splitIndex() {
    var queryString = {},
        parts = splitI(splitI(query, "?")[0], "&"),
        i = 0, l = parts.length, item;
  
    for (; i < l; i++) {
      item = splitI(parts[i], "=");
      queryString[item[0]] = item[1];
    }
    return queryString;
}
  
  function regex() {
    var queryString = {};
    query.replace(/([^?=&]+)(=([^&]*))?/g, function ($0, $1, $2, $3) {
      queryString[$1] = $3;
    });
  
    return queryString;
  }
  
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
regex
regex()
ready
split
split()
ready
split with for loop
splitFor()
ready
split with index
splitIndex()
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.