在阿拉伯字符串上使用替换时的奇怪行为

Weird behaviour when using replace on arab string

我试图理解为什么在这个片段中,对于给定的字符串

عروض تبدأ من $minprice

我明白了

عروض تبدأ من 21

返回:(

如有任何帮助,我们将不胜感激!谢谢:)

var regExp = new RegExp(/$minprice/, 'ig');
var string = "عروض تبدأ من $minprice";

console.group();
console.log(
  "new string",
  string.replace(regExp, (matched, offset, originalString) => {
    console.log('originalString', originalString);
    return '21';
  })
);
console.groupEnd();

您可能对 $ 符号位于数字右侧感到不高兴。别灰心:如果你上网搜索一下,你会发现很多阿拉伯语的权威网站,$和西文数字的相对位置是这样的,甚至是混合的3123$ 在同一页上。

至于代币的顺序,结果绝对正确,读者会期望价格在单词的左边,因为阿拉伯语是RTL语言。在许多国家/地区,他们也希望看到印度数字,但可能不会附加美元符号。

美元符号相对于数字的位置取决于跨度的方向性。 IE。如果您将字符串包装在 <span dir="rtl"> 中,它将看起来与 <span dir="ltr"> 不同。你可以试试 return '21''5821$' 看看哪个最适合你。