Autor Zpráva
Petr_1
Profil
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
re = eval("/"+text+"/g");

To je jako co? Leo
Petr_1
Profil
to je, cituji, "regulární výraz popisující část řetězce, která má být nahrazena"
peta
Profil
Petr_1
http://www.volny.cz/peter.mlich/www.htm#main7
los
Profil *
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
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 *
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");

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: