2009-09-03 16 views
12

में एस्केप कैरेक्टर को प्रतिस्थापित करना मैं जावास्क्रिप्ट स्ट्रिंग अक्षर में बैकस्लैश (एस्केप) वर्ण को प्रतिस्थापित करने की कोशिश कर रहा हूं।जावास्क्रिप्ट - एक स्ट्रिंग शाब्दिक

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

हालांकि, यह कोई परिणाम है लगता है:

मैं इतना है कि मैं तो एक रीडायरेक्ट कर सकते हैं एक डबल बैकस्लैश से बदलने की जरूरत है।

मेरे पास जावास्क्रिप्ट द्वारा संभालने से पहले बैकस्लैश से ठीक से बचने का विकल्प नहीं है।

मैं (\) के साथ (\\) कैसे बदल सकता हूं ताकि जावास्क्रिप्ट खुश रहे?

धन्यवाद, डेरेक

+0

आप HTML में बैकस्लैश स्टोर यदि आप उपयोग कर सकते हैं '.replace (/ \\/जी," \\\\ ");' इसके साथ। उदाहरण के लिए यदि HTML दस्तावेज़ में बैकस्लैश है, तो आप 'document.body.innerHTML.replace (/ \\/g," \\\\ ");', जो सभी बैकस्लैश को डबल बैकस्लैश से प्रतिस्थापित कर सकते हैं। – Viliami

उत्तर

21

यदि यह एक शाब्दिक है, तो आप से पहले जावास्क्रिप्ट उन्हें देखता बैकस्लैश से बचने के लिए की जरूरत है; उसके चारों ओर कोई रास्ता नहीं है।

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

तो newpath कहीं और से अपने मूल्य मिल रहा है, और वास्तव में एक बैकस्लैश में क्या है, तो आप उन्हें दोगुना अप की जरूरत नहीं है; लेकिन अगर आप वास्तव में किसी कारण से करना चाहता था, मत भूलना की जगह() कॉल के बैकस्लैश से बचने के लिए:

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

आप ठीक ढंग से बैकस्लैश से बचने का विकल्प नहीं है क्यों इससे पहले कि वे जावास्क्रिप्ट द्वारा नियंत्रित किया जाता है ? समस्या यह है कि आपके जावास्क्रिप्ट स्रोत कुछ अन्य स्क्रिप्टिंग भाषा है जो अपने आप में एक भागने चरित्र के रूप में \ का उपयोग करता है से उत्पन्न किया जा रहा है, तो बस से बचने का एक स्तर जोड़ें:

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

ग्रेट उत्तर moonshadow। मैं इसे देखकर जावास्क्रिप्ट से पहले पथ नहीं बदल सकता, क्योंकि यह एक एएनटी प्रतिलिपि और फिल्टर कार्य द्वारा जावास्क्रिप्ट में इंटरपोल किया गया है। मुझे एएनटी कार्य के लिए एक परिवर्तन अनुरोध करना होगा। क्या आप समझा सकते हैं कि एक स्ट्रिंग अक्षर में बचने वाले चरित्र को प्रतिस्थापित करना असंभव क्यों है लेकिन स्ट्रिंग ऑब्जेक्ट में यह संभव है? मैं इस के माध्यम से पढ़ने लेकिन मैं अभी भी नहीं दिख रहा है यही कारण है कि इस अंतर मौजूद है: The Complete Javascript Strings Reference dbasch

+0

मैं इस के माध्यम से पढ़ने लेकिन मैं अभी भी नहीं दिख रहा है यही कारण है कि इस अंतर मौजूद है: http://www.hunlock.com/blogs/The_Complete_Javascript_Strings_Reference क्षमा करें, मैं एक स्टैक ओवरफ़्लो n00b हूं;) – dbasch

+0

@dbasch: आपका उदाहरण कोड '\' वर्णों को प्रतिस्थापित नहीं कर सकता है क्योंकि प्रतिस्थापन() रन के समय तक वर्ण स्ट्रिंग में मौजूद नहीं हैं। वे बचने वाले पात्र हैं: अक्षर जो स्ट्रिंग अक्षर के पार्सिंग को नियंत्रित करते हैं और प्रक्रिया में खपत होते हैं। – moonshadow

2

आप "\\\\" के साथ की जगह ले जाना चाहिए क्योंकि "\\" एक एकल में भाग रहा है \ इस प्रकार कोई बदलाव नहीं।

+0

मैंने कोशिश की और यह प्रतिस्थापन नहीं किया। – dbasch

0

बेहतर प्रदर्शन और समझने के लिए स्ट्रिंग-भागने व्यवहार, निम्न उदाहरण लेते हैं:

आप देख सकते हैं स्ट्रिंग स्ट्रिंग विभाजित करके जे एस इंजन द्वारा पार्स किए जाने के बाद स्मृति पर कैसा होता है, इस प्रकार भी इस समस्या के संभावित (बदसूरत) समाधान की पेशकश:

'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"] 

मूल रूप से एक बैकस्लैश निम्नलिखित केरेक्टर का बचना, इस प्रकार, अप्रत्याशित परिणाम को जन्म दे रही है, तो एस्केपिंग-प्रसंग मान ली नहीं है।

समाधान:

एक लुक-अप तालिका माध्यम से, आप कई errantly पात्रों भाग निकले अगर वे \x20-\x7F की प्रिंट करने योग्य ASCII वर्ण सीमा के बाहर झूठ बहाल कर सकते हैं। उदाहरण के लिए ऊपर दिए गए उदाहरण के लिए, 12 या \x0c [12..toString(16)] '\\'+'v' बन जाएगा, और इसी तरह।

पुनश्च: जानते हैं कि जानकारी का नुकसान हुआ हो, और आप contextual- या मेटा जानकारी के माध्यम से जानकारी को बहाल करने, अपने मामले कि स्ट्रिंग प्रिंट योग्य ASCII सीमा में है में अर्थ कोशिश कर रहे हैं।

कृपया समुदाय के साथ किसी भी कार्यान्वयन को साझा करें। चीयर्स!

-1

< < एस्केप वर्ण प्रतिस्थापन >>

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); 
    } 
} 
संबंधित मुद्दे