2009-09-03 13 views
12

Bir Javascript dize değişmezinde ters eğik çizgi (karakter) karakterini değiştirmeye çalışıyorum.Javascript - Çıkış karakterini bir dize içinde değiştirme

var newpath = 'file:///C:\funstuff\buildtools\viewer.html'.replace(/\\/g,"\\"); 
window.location = newpath; 

Ancak hiçbir sonuç var gibi gözüküyor: Sonra bir yönlendirme yapmak, böylece

Ben çift ters bölü ile değiştirmek gerekir.

Javascript tarafından işlenmeden önce ters eğik çizgi doğru olarak kaçma seçeneğine sahip değilim.

Javascript'in mutlu olması için (\) ile (\\) kodunu nasıl değiştirebilirim?

sayesinde derek bir edebi ise

+0

kullanabileceğiniz' .Kapağı (/ \\/g, "\\\\"). ör. HTML belgesinde ters eğik çizgi varsa, tüm ters eğik çizgileri bir çift ters eğik çizgi ile değiştirecek olan document.body.innerHTML.replace (/ \\/g, "\\\\"); – Viliami

cevap

21

, görebilmek için Javascript onları görür önce ters eğik çizgi kaçış gerekir; Bunun etrafında bir yolu yok.

var newpath = 'file:///C:\\funstuff\\buildtools\\viewer.html'; 
window.location = newpath; 

newpath, bunları iki katına gerekmez tek ters eğik çizgi içermiyor gerçekten başka bir yerde, değerini elde edilir ve; Eğer gerçekten bir nedenle istiyorsa ama, replace() çağrısında tersbölüleri kaçmak için unutma:

newpath.replace(/\\/g,"\\\\"); 

onlar Javascript tarafından işlenir önce düzgün ters eğik çizgi kaçış seçeneği yok neden ? Sorun JavaScript kaynak kendisi bir kaçış karakteri olarak \ kullanan diğer bazı kodlama dili üretilen ediliyor olması ise sadece kaçan bir düzeyde ekleyin:

var newpath = 'file:///C:\\\\funstuff\\\\buildtools\\\\viewer.html'; 
+0

Harika cevap moonschadow. Javascript'in bir ANT kopyalama ve filtre görevi tarafından enterpolasyona girmesi nedeniyle, Javascript'in görünmeden önce yolu değiştiremiyorum. ANT görevi için bir değişiklik talebi yapmak zorunda kalacağım. Çıkış karakterini bir dize değişmezinde neden değiştirmenin imkansız olduğunu açıklayabilir misiniz, ancak bir dize nesnesinde bu mümkün mü? Bunu okumak ama bu fark var neden hala görmüyorum: The Complete Javascript Strings Reference dbasch

+0

Ben bu okumak ama bu fark var neden hala görmüyorum: http://www.hunlock.com/blogs/The_Complete_Javascript_Strings_Reference Üzgünüz, Yığın Taşması n00b;) – dbasch

+0

@dbasch: Örnek kodunuz '(') karakterini değiştiremez, çünkü() karakteri, replace() işlevi çalıştığında dizede artık bulunmaz. Bunlar kaçış karakterleridir: Dize değişmezini ayrıştırmayı kontrol eden ve süreçte tüketilen karakterler. – moonshadow

2

Sen "\\\\" ile değiştirerek edilmelidir çünkü "\\" tek bir şeye kaçıyor, dolayısıyla bir değişiklik yok.

+0

Bunu denedim ve yerini almadı. – dbasch

0

daha iyi göstermek ve anlamak için dize kaçan davranışı aşağıdaki örneği inceleyelim:

Böylece, dize dize bölerek JS-motor tarafından çözümlenen sonra hafızada nasıl göründüğünü görebilirsiniz ,

'file:///C:\funstuff\buildtools\viewer.html'.split('') 
//> 
["f", "i", "l", "e", ":", "/", "/", "/", "C", ":", "", "u", "n", "s", "t", "u", 
    "f", "f", "", "u", "i", "l", "d", "t", "o", "o", "l", "s", "", "i", "e", "w", 
    "e", "r", ".", "h", "t", "m", "l"] 

'file:///C:\funstuff\buildtools\viewer.html'.split('').map(function(e){ 
    return e.charCodeAt() 
}); 
//> 
[102, 105, 108, 101, 58, 47, 47, 47, 67, 58, 12, 117, 110, 115, 116, 117, 102, 
102, 8, 117, 105, 108, 100, 116, 111, 111, 108, 115, 11, 105, 101, 119, 101, 
114, 46, 104, 116, 109, 108] 
//>in Hex values by applying .toString(16) 
["66", "69", "6c", "65", "3a", "2f", "2f", "2f", "43", "3a", "c", "75", "6e", 
"73", "74", "75", "66", "66", "8", "75", "69", "6c", "64", "74", "6f", "6f", 
"6c", "73", "b", "69", "65", "77", "65", "72", "2e", "68", "74", "6d", "6c"] 

Temelde tek eğik şu karakterleri kaçar kaçış-bağlam önemsenmesi değilse böylece beklenmedik sonuçlara sebebiyet veren: bu soruna potansiyel (çirkin) çözümler sunan.

Çözüm: bir göz taramalı tablodan sayesinde

, onlar \x20-\x7F yazdırılabilir ASCII karakter aralığı dışında kalan ise birçok kazaen karakterlerin çıkışını geri yükleyebilirsiniz. Örneğin yukarıdaki örnek için, 12 veya \x0c [12..toString(16)] '\\'+'v' olur ve böyle devam eder.

PS: bir bilgi kaybı meydana unutmayın ve dize yazdırılabilir ASCII aralığında sizin durumunuzda yani contextual- veya meta bilgi yoluyla bilgi geri çalışıyoruz.

Lütfen topluluktaki tüm uygulamaları paylaşın. Şerefe! onunla `;

-1

< < Kaçış Karakterler Değiştirme >> HTML'de ters eğik çizgi saklıyorsanız

import java.util.Scanner; 

public class Example7 { 

    public static void main(String[] args) { 
    Scanner in=new Scanner(System.in); 
    System.out.println("Please enter a sentence: "); 
    String a=in.nextLine(); 
    //System.out.println("the word had enter: "+a); 

    String Str1 = a.replace("\\n", "(new_line)"); 
    //System.out.println(Str1); 
    String Str2 = Str1.replace("\\t", "(tab)"); 
    //System.out.println(Str2); 
    String Str3 = Str2.replace("\\t", "(tab)"); 
    String Str4 = Str3.replace("\\\\", "(comment_line)"); 
    String Str5 = Str4.replace(":)", "(smile) "); 
    System.out.println("The new sentence:" +Str5); 
    } 
}