Autor Zpráva
Radim24
Profil
Ahoj, poradili by jste mi vyřešit následující problém?

Mám řetězec, ve kterém je např. "text w:1024px text) A potřebuju změnit hodnotu 1024px na 512px. Hlavní pravidlo je tedy: mezera,písmeno (tj. var attr), dvojtečka, číslo, px, mezera.

Pokoušel jsem se to řešit následujícím způsobem. Ačkoliv .match řetězec najde, .replace jej nezamění. Kdybych místo jednoduchých uvozovek použil lomítka //, tak by to fungovalo, pokud bych místo '+attr+/ použil w. Zkrátka to neumí vyhovnodit tu proměnnou attr.

source_ = source_.replace( ' '+attr+/:.{0,4}px/ , ' '+'w:'+newval);

Dík za radu
Joker
Profil
Nejspíš protože attr je řetězec a ne regulární výraz.
Zkusil bych ten regulární výraz sestavit přes new RegExp()
Radim24
Profil
Díky moc za radu!
fireball_
Profil
Ahoj, co třeba takto:

var source_ = 'width:1024px; height:600px',
newval = 512,
attr='height',
reg = new RegExp('('+attr+':)[0-9]{1,4}(px)', "g");

source_ = source_.replace(reg, '$1'+newval+'$2');

To je celej přiklad co jsem zkoušel a testoval. Takže určitě funguje. Co ty týká vyhodnocení té tvé proměné mám pocit(nevím to jistě) že v této definici reguláru to nelze použít ale při vytvoření přes new RexExp j. Pokud někdo ví jak vyhodnit poměnou i v takto /reg/ zapsanem regularu tak sem s radou ;-)
Chamurappi
Profil
Reaguji na fireballa:
Pokud někdo ví jak vyhodnit poměnou i v takto /reg/ zapsanem regularu
Já jsem si celkem jist, že to bohužel nejde. Pomůže jedině spojení řetězců a new RegExp.
Radim24
Profil
Použil jsem novou instanci regExp.
Radim24
Profil
Ještě bych se zeptal, jestli se dá funkce .replace použít podobně jako v php fnc preg_replace, která umožňuje definovat pole s předlohama a pole s náhradama. Když bych chtěl provést více náhrad v jednom řetězci najednou?
fireball_
Profil
já pro tento případ používám object, ukázka fce kterou používám k ostranění diakritiky

String.prototype.noDiac = function(test){
var str = this,
map = test || { 'á': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'ě': 'e', 'í': 'i', 'ň': 'n', 'ó': 'o', 'ř': 'r', 'š': 's', 'ť': 't', 'ú': 'u', 'ů': 'u', 'ý': 'y', 'ž': 'z' };
for (var i in map){
if(str.search(i) != -1){
str = str.replace(new RegExp(i, "g"), map[i]);
}
if (str.search(i.toUpperCase()) != -1){
str = str.replace(new RegExp(i.toUpperCase(), "g"), map[i].toUpperCase());
}
}
return str;
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0