Javascript-ul înlocuiește slash-ul unescaped

Vreau să înlocuiesc un slash neeșapat într-un șir cu backslash. Dar sa întâmplat ceva ciudat:

"\content\hs\gj\home.css".replace(/\\/gi,"/")

care returnează "contenthsgjhome.css". Înțeleg că dacă o schimbi

"\\content\\hs\\gj\\home.css".replace(/\\/gi,"/")`

Apoi va functiona asa cum era de asteptat, dar nu pot schimba sirul deoarece este doar outputul de catre nodejs path.join ("conetnt", "hs", "gj", "home.css") .

Ce ar trebui să fac?

0
cum de fapt obții șirul tău? Uită-te la acest articol SO șirul dvs. ar trebui să nu fie posibil dacă nu îl produceți singur în javascript: JavaScript și backslashes înlocuiesc "> stackoverflow.com/questions/2479309/…
adăugat autor snies, sursa

2 răspunsuri

Motivul pentru care returnează "contenthsgjhome.css" este că șirul dvs. nu are în realitate niciun backslash în el, pentru că singurele backslash-uri într-un literal șir vor fi ignorate dacă nu au sens să scape de următoarele (de exemplu, "\\" sau "\ n" ). "\ c" nu are semnificație specială ca o evadare, deci este interpretată ca "c" .

"\content\hs\gj\home.css"

Se încheie la fel ca:

"contenthsgjhome.css"

Deci nu există backslash-uri pentru .replace() pentru a găsi.

(Rețineți că dacă faceți ați scăpat backslash-uri într-un șir de caractere literal ca "\\" care face parte doar din sintaxa literală, "\" .)

Poate că dacă ați putea explica ce înțelegeți prin "este doar rezultatul FS", cineva ar putea oferi mai multe sfaturi. Aceasta este o problemă obișnuită atunci când JSP/ASP/PHP/etc ieși codul JS - escapingul trebuie să se întâmple în codul JSP/ASP/PHP/etc înainte ca interpretul JS să îl vadă.

6
adăugat
mulțumesc, șirul este de fapt din calea nodurilor ("conetnt", "hs", "gj", "home.css").
adăugat autor iNc0ming, sursa
nnnnnn, mulțumesc pentru sfatul dvs. Am rezolvat-o folosind ["conetnt", "hs", "gj", "home.css"]. Problema rezolvată acum!
adăugat autor iNc0ming, sursa
Deci, este într-o variabilă, nu într-un literal șir? Actualizați-vă întrebarea pentru a arăta exact cum folosiți ieșirea din path.join ("conetnt", "hs", "gj", "home.css") . Exemplu de ieșire din path.join() doco pare să se unească cu slash-urile din față, nu cu backslash-urile. Dacă rulați codul sub nodejs care produce ieșirea trimisă în browser, trebuie să faceți escaparea direct în codul nodejs, nu în browser.
adăugat autor nnnnnn, sursa
Exact, șirul dvs. ar trebui să fie definit cu dubluri: '\\ content \\ hs \\ gj \\ home.css'
adăugat autor drinchev, sursa
yourstring.split(String.fromCharCode(92)).join('/')
0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com