/* Убирает пробелы из начала и конца строки  */
String.prototype.trim = function() {
    return this.replace(/^\s*|\s*$/g, "");
};

/* Убирает пробелы из начала строки */
String.prototype.ltrim = function() {
    return this.replace(/^\s*/g, "");
};

/* Убирает пробелы из конца строки */
String.prototype.rtrim = function() {
    return this.replace(/\s*$/g, "");
};

/* Возвращает количество вхождений подстроки в строку */
String.prototype.substrCount = function(s) {
    return this.split(s).length - 1;
};

/* Проверяет, содержит ли строка только буквы и цифры */
String.prototype.isAlpha = function() {
    return (/^[a-z]$/i.test(this));
};

/* Проверяет, является ли строка одной цифрой */
String.prototype.isDigit = function() {
    return (/^\d$/.test(this));
};

/* Проверяет, содержит ли строка только цифры */
String.prototype.isNumeric = function() {
    return (/^\d+$/.test(this));
};

/*
Заменяет ? на переменные в скобках.
Удобно применить, когда собираете большую строку
Пример:
var s = '<div id="'+id+'" class="'+className+'">'+innerText+'</div>';
var s = '<div id="?" class="?">?</div>'.format(id, className, innerText);
 */
String.prototype.format = function() {
    if (!arguments.length) { throw "String.format() failed, no arguments passed, this = "+this; }
    var tokens = this.split("?");
    if (arguments.length != (tokens.length - 1)) { throw "String.format() failed, tokens != arguments, this = "+this; }
    var s = tokens[0];
    for (var i = 0; i < arguments.length; ++i) {
        s += (arguments[i] + tokens[i + 1]);
    }
    return s;
};

/* Повторяет строку n раз */
String.prototype.repeat = function(n) {
    var ret = "";
    for (var i = 0; i < n; ++i) {
        ret += this;
    }
    return ret;
};