Autor | Zpráva | ||
---|---|---|---|
Petr_1 Profil |
#1 · Zasláno: 23. 5. 2008, 22:52:31
Ahoj, mám funkci skript nahrazující řetězec jiným řetězcem, bohužel mi nefunguje pro znaky jako hvězdička, závorka atd. Věděl by někdo jak skript upravit? Díky.
<script> // @#$%^&*() text='*'; re = eval("/"+text+"/g"); text=text.replace(re,"b"); document.write(text); </script> |
||
Leo Profil |
#2 · Zasláno: 23. 5. 2008, 23:17:12
re = eval("/"+text+"/g");
To je jako co? Leo |
||
Petr_1 Profil |
#3 · Zasláno: 23. 5. 2008, 23:20:07
to je, cituji, "regulární výraz popisující část řetězce, která má být nahrazena"
|
||
peta Profil |
#4 · Zasláno: 24. 5. 2008, 17:05:36
|
||
los Profil * |
#5 · Zasláno: 25. 5. 2008, 01:42:48
Regulárny výraz sa vytvára pomocou new RegExp a nie volaním eval. Špeciálne znaky je potrebné escapovať. Ak som na žiaden špeciálny prípad nezabudol, tak nasledujúca funkcia sa postará o minimálnu množinu všetkých znakov, ktoré treba escapovať:
function escapeRe(s) { return s.replace(/([\\*+?|{[()^$.])/g, "\\$1"); } var text='*'; var re = new RegExp(escapeRe(text), "g"); text = text.replace(re, "b"); document.write(text); |
||
Petr_1 Profil |
#6 · Zasláno: 25. 5. 2008, 08:41:48
eval je tam proto, že se nahrazuje cca 30 řetězců jinými, takže mám dvě pole, která procházím a nahrazuji
už jsem to ale vyřešil takto: <script> // @#$%^&*() text='*'; re = eval("/"+"\\"+text+"/g"); text=text.replace(re,"b"); document.write(text); </script> |
||
los Profil * |
#7 · Zasláno: 25. 5. 2008, 09:50:53
eval je tam úplne zbytočný.
Ak je v premennej text vždy práve jeden znak, tak stačí: var re = new RegExp("\\" + text, "g"); |
||
Časová prodleva: 16 let
|
0