Autor Zpráva
loping
Profil *
Ahoj,

mám asi malý, nicméně pro mě podstatný a hlavně  neřešitelný problém. Mám v JAVASCRIPTU řetězec znaků, přičemž jeden ze znaků je „\” - a zde je můj problém – potřebuji jej nahradit takhle “\\”.

Příklad:

var retezec = "@c@??\VfA@d@K";
………..
a já nějak potřebuji dostat řetězec vypadající takhle

var retezec = "@c@??\\VfA@d@K";


Zkoušel jsem různé nahrazování znaků, procházení řetězců, ale nikdy tento znak žádná fce nanašla. Už jsem i slyšel názor že jsou v „loji“  … tak věřím, že nejsem
Chamurappi
Profil
Reaguji na lopinga:
var vysledek = retezec.replace(/\\/g, "\\\\");
Nebo bez regulárního výrazu:
var vysledek = retezec.split("\\").join("\\\\");
Měsíček
Profil
Chamurappi .. ono je to stále při starém nebo jsem něco přehlédl?
<script type="text/javascript">
  alert(retezec = "@c@??\VfA@d@K");                           // @c@??VfA@d@K
  alert(retezec = "@c@??\VfA@d@K".split("\\").join("\\\\"));  // @c@??VfA@d@K
  alert(retezec = "@c@??\VfA@d@K".replace(/\\/g, "\\\\"));    // @c@??VfA@d@K
</script>
čiliže správně by mohlo být tohle:
<script type="text/javascript">
  alert(retezec = "@c@??\VfA@d@K".replace(/\V/g, "\\\\"));
</script>
EDIT:// a bez mojí special syntaxe:
<script type="text/javascript">
  var retezec = "@c@??\VfA@d@K";
  var vysledek = retezec.replace(/\V/g, "\\\\");
    alert(vysledek);
</script>
bohyn
Profil
loping
Kdyz to promene vlozis "@c@??\VfA@d@K" tak interpret to bere escapesekvenci \V a zpetne lomitko odstrani (vysvetluje proc ho nemuzes najit). Pokud tam chces mit 1 lomitko tak je zdvoj, jestli tam chces mit 2 lomitka napis \\\\
Z toho co sem pochopil tak potrebujes toto:
var retezec = "@c@??\\\\VfA@d@K";
Chamurappi
Profil
Reaguji na Měsíčka:
Vycházel jsem z toho, že má „řetězec znaků, přičemž jeden ze znaků je ‚\‘“. Neuvědomil jsem si, že myslí spíš zápis řetězce.
bohyn
Profil
Měsíček
On tam potrebuje dotat lomitka ne nahradit V lomitkama ;)
Měsíček
Profil
Reaguji na bohyna:

"On tam potrebuje dotat lomitka ne nahradit V lomitkama ;)"

Možná, a? :) Já si procvičil JS, ty jsis připomenul jak je to se zpětnými lomítky a loping dostal dvojité řešení .. a všichni žili šťastně až do smrti.
loping
Profil *
zdravím všechny a děkuji, nicméně - pokud jsem diskuzi správně prošel, tak můj problém spočívá v následném:
- jedna fce (kóduje čísla na ASCII znaky) mi vygeneruje určitý řetězec znaků - a já dopředu nevím, kde se může objevit pro mě problematický znak \ (zpětného lomítka)
- nicméně ho potřebuji brát jako obyčejný znak a proto potřebuji ve výsledném řetězci přidat (nahradit) ještě jedno - tj. \ => \\
- vše však musí probíhat "automaticky" :), proto nemůžu ručně přidávat do řetězce toto \
- nerozumím úplně dobře - myslím, že se jedná o regulerní výraz (jen jsem to někde vyčetl :) ) - ale líbí se mi, ač nefunguje :), zápis
var vysledek = retezec.replace(/\\/g, "\\\\");
napadlo mě to ještě upravit na var vysledek = retezec.replace(/\\\/g, "\\\\"); ale to také nefunguje

... to Měsíček: jestli to nevyřeším, tak určitě šťastně žít nebudu :)
Měsíček
Profil
Tak si jednoduše ten \ najdi a nebo pomocí cyklu najít \ (x) a když to bude zrovna to \ (x) tak ho převést .. a to už jsme ti ukázali :)
loping
Profil *
asi jsem natvrdlý, ale ... ač jsem zkoušel fci ...indexOf... či třeba ... split... tak nikdy to lomítko \ vůbec nenašlo - prostě neznám jediný příkaz, funkci, která by mi na to lomítko ukázala
Chamurappi
Profil
Reaguji na lopinga:
jedna fce (kóduje čísla na ASCII znaky) mi vygeneruje určitý řetězec znaků
Jaká jedna funkce? Javascriptová funkce na straně klienta? Nebo nějaká utajená obluda na straně serveru, která ten výsledek vsazuje do výstupu?

myslím, že se jedná o regulerní výraz (jen jsem to někde vyčetl :) )
Regulární. Mohl jsi to vyčíst třeba z toho samého příspěvku, odkud sis zkopíroval ten zápis.

... to Měsíček
Měsíček není to, ale ten. Je mužského rodu.
bohyn
Profil
loping
Pokud \ uz mas v retezci tak pred nej nepotrebujes nic vkladat. Tvuj problem mozna bude v generovani toho retezce.

Edit: aspon co se tyce escape sekvence
loping
Profil *
Chamurappi: ano, je to fce na straně klienta - si aspoň myslím - prostě jsem stáhnul nějaké JS soubory a v nich jsou fce, já je jen volám - konkrétně se jedná o zakodovani geografických bodů - pr. mam 10 bodu a z nich mam udelanou polylinii - nemohu ukladat jednotlive geog. souradnice do databaze (mohu, ale nechci) a proto existuje kodovaci metoda, ktera mi kazdy bod zasifruje do retezce ASCII znaku - viz aplikace (ukazkova od googlu) ... http://code.google.com/apis/maps/documentation/polylineutility.html ...
- tzn. ja mam souradnice bodu a zavolam nejake fce ktere mam v tech stahnutych souborech a ty mi je zakoduji do RETEZCE

- Měsíčkovi se omlouvám :) - myslel jsem to anglicky (to Měsíček)
loping
Profil *
konkretni priklad -
http://code.google.com/apis/maps/documentation/polylineutility.html
Encoded Polylinie:
czrcFtithVfZh~@t]qVjv@{h@ibAsH_\}i@ba@sbA`[toBjHh~@fI}LX_k@mSm`AiNss@f Z`l@awBpaA
Encoded Levels:
BBBBBBBBBBBBBBB

vlozit tyto dva radky a pak uz staci jen kliknout na tlacitko "Decode Polyline and Levesl" ... vlozi se vam polylinie s lomovymi body a jejich geografickymi souradnicemi ... tento sifrovaci algoritmus ja neovlivnim - jen proste potrebuji pracovat s timto vygenerovanym retezcem (pozn. asi ve tretine retezce je prave to \ )
bohyn
Profil
Retezec zadavas pres input? Pokud ano neni treba vkladat dalsi lomitko a
alert(retezec.indexOf("\\"));

musi fungovat

Pokud to chces posilat na server tak na to pouzij fci escape()
Měsíček
Profil
Reaguji na bohyna:

"musi fungovat "

Ale, ale ..
<script type="text/javascript">
  var retezec = "@c@??\aA@d@K";
    alert(retezec.indexOf("\\")); // -1 = nebylo nalezeno
/* Vyvracíš svou dřívější teorii v prvním příspěvků (ta byla správná) */
</script>
bohyn
Profil
Měsíček
Ja psal pres input :) (popripade z nejakych tech funkci co to prevadeji na retezec)
loping
Profil *
hmm ... moc ti bohyne nerozumím, ale asi to stejně nepůjde jak radíš. Nabývám pocitu, že v JS je tento problém neřešitelný ... nicméně pro mě se problém již vyřešil, při ukládání do databáze tento řetězec proženu fcí ... addslashes ... a ta mi potřebné lomítko dodá ... já se to pořád snažil řešit v JS při načtení řetězce a s tím jsem si nevěděl rady

nicméně stejně všem moc DĚKUJI
loping
Profil *
pozn. jistě ne pro vás, ale kdyby měl někdo podobný problém a nebyl úplně zběhlý v programování (jako já :) )

addslashes je fcí v PHP a přidá před všechny problematické znaky lomítko
př.

"abc\nbco" => "abc\\nbco"
bohyn
Profil
OMG pred vkladanim do databaze vzdy osetri vkladane retezce fci mysql_real_escape_string a rozhodne to neres na strane klienta v podobe JS.

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