2016-08-16 6 views
5

मुझे उत्सुकता है कि बाएं भाषा के दाएं (ये यादृच्छिक अरबी वर्ण हैं) के लिए निम्नलिखित प्लेसहोल्डर प्रतिस्थापन क्यों स्वरूपित स्ट्रिंग को सभी शब्दों को उलट देता है।जावास्क्रिप्ट स्ट्रिंग क्यों दाएं से बाएं भाषाओं के लिए शब्द क्रम को उलट देता है?

'{0} تكنولوجيا'.replace('{0}', 'هلهل') 
=> "هلهل تكنولوجيا" 

यह व्यवहार नवीनतम क्रोम, एफएफ और सफारी में देखा गया था। यह शब्द को नोड में वही रखता है।

उत्तर

2

ऐसा नहीं है। replace वही करता है जो आपने इसे करने के लिए कहा था: هلهل के साथ उस स्ट्रिंग के पहले तीन अक्षरों को प्रतिस्थापित करता है;

var before = '{00} تكنولوجيا'; 
 
var rep = 'هلهل'; 
 
var after = before.replace('{00}', rep); 
 
console.log("before", before.split("").map(toCharCode).join(", ")); 
 
console.log("rep ", rep.split("").map(toCharCode).join(", ")); 
 
console.log("after ", after.split("").map(toCharCode).join(", ")); 
 

 
function toCharCode(c) { 
 
    var hex = c.charCodeAt(0).toString(16); 
 
    hex = "0000".substr(hex.length - 4) + hex; 
 
    return "U-" + hex; 
 
}

आउटपुट::

मैं इसे चार के बजाय तीन तो मूल बनाने के लिए जा रहा हूँ और प्रतिस्थापन समान अवधि वाले (यह देखना आसान क्या हो रहा है बनाता है)
 
before U-007b, U-0030, U-0030, U-007d, U-0020, U-062a, U-0643, U-0646, U-0648, U-0644, U-0648, U-062c, U-064a, U-0627 
rep U-0647, U-0644, U-0647, U-0644 
after U-0647, U-0644, U-0647, U-0644, U-0020, U-062a, U-0643, U-0646, U-0648, U-0644, U-0648, U-062c, U-064a, U-0627 

ध्यान दें कि प्रतिस्थापन अनुक्रम (यू-0647, यू-0644, यू-0647, यू-0644) स्ट्रिंग की शुरुआत में है।

जो आप देख रहे हैं वह है स्ट्रिंग प्रदर्शित है। चूंकि आरटीएल अक्षरों के संगत स्पैन दाएं से बाएं प्रदर्शित होते हैं, और अब आपके पास आरटीएल का एक ही अवधि है जो इस तरह से दिखाया गया है: प्रतिस्थापन शुरुआत (दूर दाएं) है और पाठ बाईं ओर जारी है। इससे पहले, आपके पास एलटीआर और आरटीएल का गलत था, जिसे एलटीआर (बाएं से दाएं दिखाया गया) के साथ दिखाया गया था, इसके बाद आरटीएल (दाएं से बाएं दिखाया गया)।

संबंधित मुद्दे