Exercices

Obtenir l'avant dernier caractères d'une chaîne

// une ligne
var c = "abcdef".match(/(.).$/)[1]   /* 'e' */
var c = 'abcdef'.match(/.(?=.$)/)    /* 'e' */
var c = "abcdef".substr(-2, 1)       /* 'e' */
var str = 'abcdef', c=''; if (str.length > 1) { c=str.charAt(str.length-2); }       /* 'e' */
var str = 'abcdef', c=''; if (str.length > 1) { c=str[str.length-2]; }              /* 'e' */

// multi ligne
var re = /(.).\n/g; var m = [], s= null; while(s = re.exec("abcdef\nghijkl\n")) { m.push(s); } m;

Inverser une date: YYYY-MM-DD vers DD-MM-YYYY:

'2013-03-01'.replace(/(\d{4})-(\d\d)-(\d\d)/, "$3-$2-$1") /* 01-03-2013 */
'2013-03-01'.replace(/^(\d+)-(\d+)-(\d+)$/, "$3-$2-$1")   /* 01-03-2013 */
'2013-03-01'.split('-').reverse().join('-')               /* 01-03-2013 */
var s = '2013-03-01'; s.substr(-2,2) + s.substr(4,4) + s.substr(0,4) /* 01-03-2013 */

Répéter un caractère

// soit
String.prototype.repeat = function(n) (n) { var r = ''; for(var i = 0; i < n; i++) { r+=this; } return r; }
// ou encore
String.prototype.repeat = function(n) { return (new Array(n+1)).join(this); }

// Utilisation: 'foo'.repeat(3) donne 'foofoofoo'

Caractère se répète?

// check if a char is repeating itself...
String.prototype.charRepeatItself = function() { var s = this.toString(); var o = {}; for (var i = 0, l = s.length; i < l; i++) { var c = s.charAt(i); if (c in o) { return true; } o[c]=1; } return false };
'ABCZ'.charRepeatItself() // false
'ABCA'.charRepeatItself() // true

Changer le caractère à une position

// soit
String.prototype.setCharAt = function(n,c) { return [this.slice(0,n), c, this.slice(n+1)].join(''); }
// ou encore
String.prototype.setCharAt = function(n,c) { return this.replace(new RegExp("(.{"+n+"})."),"$1"+c); }

// Utilisation: 'foocar'.setCharAt(3,'b') donne 'foobar'

Remplissage (padding)

// 3-zeros padding for number n
("00" + n).slice(-3) // n = 0 : '000', n = 10 : '010', n = 999 : '999', n = 1000 : '000'

indexOf

Si on ne veut pas utiliser String.prototype.indexOf...

function indexOf(str, search, indexStart) {
    indexStart = indexStart || 0;
    if (!search.length) { return -1; }
    for(var i = indexStart; i < str.length; i++) {
        if (str[i] == search[0]) {
            for(var j = 1; j+i < str.length; j++) {
                if (str[j+i] !== search[j]) {
                    break;
                }
            }
            if (j == search.length) {
                return i;
            }
        }
    }
    return -1;
}

console.log(indexOf('this is a test', 'is a',0)); // 5
console.log(indexOf('this is a test', 'that',0)); // -1

HTML encoding

"&#39;Subway Vigilante&#39;".replace(/&#(\d+);/g, function(a,b) { return String.fromCharCode(b); }) // "'Subway Vigilante'"