我很好奇为什么以下用占位符替换从右到左的语言(这些是随机的阿拉伯字符)会导致格式化的字符串反转所有单词。
'{0} تكنولوجيا'.replace('{0}', 'هلهل')
=> "هلهل تكنولوجيا"
在最新的Chrome,FF和Safari中观察到此行为。它在Node中保持单词顺序相同。
最佳答案
没有。 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;
}
输出:
在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
代表U-0647,U-0644,U-0647,U-0644
在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
请注意,替换序列(U-0647,U-0644,U-0647,U-0644)现在位于字符串的开头。
您所看到的是字符串显示的方式。因为RTL字符的连续范围是从右到左显示的,所以您现在有一个RTL范围,它以这种方式显示:替换在开头(最右边),文本继续在左边。以前,您对LTR和RTL有误,这与LTR(从左至右显示)和RTL(从右至左显示)一起显示。