Autor | Zpráva | ||
---|---|---|---|
Radim24 Profil |
#1 · Zasláno: 3. 9. 2009, 09:38:42
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 |
#2 · Zasláno: 3. 9. 2009, 10:38:51
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 |
#3 · Zasláno: 3. 9. 2009, 10:44:19
Díky moc za radu!
|
||
fireball_ Profil |
#4 · Zasláno: 3. 9. 2009, 10:48:57
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 |
#5 · Zasláno: 3. 9. 2009, 10:58:28 · Upravil/a: Chamurappi
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 |
#6 · Zasláno: 3. 9. 2009, 12:50:47 · Upravil/a: Radim24
Použil jsem novou instanci regExp.
|
||
Radim24 Profil |
#7 · Zasláno: 3. 9. 2009, 20:43:43 · Upravil/a: Radim24
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 |
#8 · Zasláno: 4. 9. 2009, 07:00:31
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; } |
||
Časová prodleva: 15 let
|
0