Poznámky (de)kodéra

Nesouvislé fragmenty kódu

Javascript – rychlý replace

| 0 comments

Při optimalizaci slabých míst v jedné starší komponentě jsem narazil na místo kde se celkem nešikovně a pomalu nahrazovaly znaky. Pro inspiraci zveřejňuji kód který nahrazovačny nad objemnými řetězci výrazně zrychlil.

/**
 * Fast Javasvript replace
 * @param {String} value Original string
 * @param {Object} charmap  The key-value object to replace the value with
 * @return {String} New string with replaced values
 */
function replace(value, charmap) {

	var patt = function() {
			var p = "";
			for(var k in charmap) {
				if(charmap.hasOwnProperty(k)) {
					p = p.concat(k);
				}
			}
			return "[" + p + "]";
		};

	return value.replace(new RegExp(patt(), "g"), function(chr) {
		return(chr in map) ? map[chr] : chr;
	});
}


// Příklad použití:

//mapa nahrazovaných znaků/částí
// klíč - co najít, zkak/regulární výraz
// hodnota - čím nahradit, řetězec
var map = {
	"a": "b",
	"<": "&lt;",
	">": "&gt;",
	"\.": "[dot]",
	"\?": "[what]"
};

var result = replace("text<strong>tecka=.?</strong>", map);

Příklad online na jsfiddle.net.

Napsat komentář

Required fields are marked *.


Current ye@r *