Cum se înlocuiește global o bară oblică într-un șir JavaScript? (Programare, Javascript)

Babiker a intrebat.
a intrebat.

Cum să înlocuiți global o bară oblică înainte într-un șir JavaScript?

10 răspunsuri
Seldaek

Următoarele ar fi de ajuns, dar va înlocui doar o singură ocurență:

"string".replace('/', 'ForwardSlash');

Pentru o înlocuire globală, sau dacă preferați expresiile regulate, trebuie doar să scăpați slash-ul:

"string".replace(///g, 'ForwardSlash');

Comentarii

  • Primul fragment nu face înlocuirea globală. Nu sunt prea sigur cum se face înlocuirea globală în mod non-regex. –  > Por BoltClock.
  • Ah, corect, nu am încercat cu mai mult de o bară oblică. Ar putea fi făcut cu "string".replace('/', 'ForwardSlash', 'g') dar acesta este un argument non-standard care funcționează doar în Firefox afaik. –  > Por Seldaek.
  • "string".replace(///g, 'ForwardSlash'); funcționează, dar scoateți /g din asta și nu mai funcționează. –  > Por johntrepreneur.
  • @johntrepreneur g-ul indică faptul că este o înlocuire globală, adică înlocuiește toate instanțele din elementul potrivit. /. Fără g, înlocuiește doar o singură instanță. Și dacă eliminați /g întrerupeți complet regexul, deoarece ultimul / este delimitatorul de sfârșit. –  > Por Seldaek.
  • @RameshRajendran acesta este modul în care este API-ul… în mod implicit înlocuiește doar o singură dată, apoi se oprește când a găsit una de înlocuit. Vedeți și developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… –  > Por Seldaek.
BoltClock

Utilizați un literal regex cu ajutorul funcției g și scăpați bara oblică înainte cu o bară inversă pentru a nu intra în conflict cu delimitatorii.

var str = 'some // slashes', replacement = '';
var replaced = str.replace(///g, replacement);

PleaseStand

Fără a folosi regex (deși aș face acest lucru doar dacă șirul de căutare este introdus de utilizator):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 

Hemlock

Asta este ceea ce vă doriți?

'string with / in it'.replace(///g, '\');

Marty

Acest lucru a funcționat pentru mine în transformarea "//" în doar "/".

str.replace(////g, '/');

Baz

Trebuie să înfășurați bara oblică pentru a evita problemele de navigare încrucișată sau //comentarea.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');

Vinay

Bună, o mică corecție în scriptul de mai sus… scriptul de mai sus sare peste primul caracter atunci când afișează rezultatul.

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}

Christopher Lincoln
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

Regex-ul propus ///g nu a funcționat pentru mine; restul liniei (//g, replacement);) a fost comentat.

Comentarii

  • Vă rog să rețineți că nu sunt sigur de modul în care performanța acestui lucru se compară cu soluția propusă de divizare/unire a matricei. –  > Por Christopher Lincoln.
  • … am dat peste asta … încercați un alt IDE care utilizează o evidențiere mai inteligentă a sintaxei. Nu vă bazați pe culorile editorului de cod, ci credeți în puterea parserului de stat care vă simbolizează corect codul la momentul execuției. –  > Por soletan.
Jeff Luyet

Aceasta este ideea lui Christopher Lincolns, dar cu un cod corect:

function replace(str,find,replace){
    if (find != ""){
        str = str.toString();
        var aStr = str.split(find);
        for(var i = 0; i < aStr.length; i++) {
            if (i > 0){
                str = str + replace + aStr[i];
            }else{
                str = aStr[i];
            }
        }
    }
    return str;
}

Exemplu de utilizare:

var somevariable = replace('//\//sdfas///\////','/sdf','replacethis');

Înlocuirea globală a șirurilor de caractere Javascript este inutil de complicată. Această funcție rezolvă această problemă. Există probabil un mic impact asupra performanței, dar sunt sigur că este neglijabil.

Iată o funcție alternativă care arată mult mai curat, dar este în medie cu 25-20% mai lentă decât funcția de mai sus:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}

rioV8

Puteți crea un fișier RegExp pentru a-l face puțin mai ușor de citit

str.replace(new RegExp('/'), 'foobar');

Dacă doriți să le înlocuiți pe toate, adăugați "g" flag

str.replace(new RegExp('/', 'g'), 'foobar');