匹配互联的阿拉伯字符

时间:2014-05-24 09:01:54

标签: javascript regex

我需要匹配互连的阿拉伯字符来进行扩展,如下所示:

 بسم الله الرحمن الرحيم

变为

بـسـم الـلـه الـرحـمـن الـرحـيـم

有没有办法使用正则表达式?

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

"بسم الله الرحمن الرحيم".replace(/(ب|ت|ث|ج|ح|خ|س|ش|ص|ض|ط|ظ|ع|غ|ف|ق|ك|ل|م|ن|ه|ي)(?=\S)/g, "$1ـ");

返回:

"بـسـم الـلـه الـرحـمـن الـرحـيـم"

澄清:

我们通过在所有这些字符之间执行OR组来匹配可以与前进字符互连的字母,然后我们确保它后面没有空格(不是单词结尾) 。然后我们自己替换第一个匹配的组(字母)($ 1),后跟一个扩展字符。

答案 1 :(得分:0)

我有一个项目,我必须根据字母的位置选择正确的unicode代码进行渲染;这样它们就会在适当时出现连接(或断开连接),因为我使用的系统不符合Unicode。

断开连接的Meem(م)的unicode值与连接的不同。但是:

不幸的是,对于你的情况,并且最幸运的是在许多其他情况下,它是unicode规范的一部分,显示字母与它们的实际unicode值分开。这就是为什么你可能有一个断开连接的Meem的unicode,但它显示为连接!规范包括将连接的Meem与断开连接的Meem进行比较,总是在语义上产生正确的值,这对于等价是正确的。这使事情变得容易多了!

我最终做的是创建静态数据结构(使用硬编码字典或数组)或XML或其他。这个数据结构会告诉我们每个阿拉伯字母的连接与否(之前和之后)。

例如:

//list of chars that can connect before and after
var canConnectBeforeAfter = new List<char>() { 'ع', 'ت', 'ب', 'ي' /*and so on*/ };

//list of chars that can connect only to character before them (of that character can connect to the one after it! watch out for وو)
var cannotConnectAfter = new List<char>() { 'ر', 'و' };

var cannotConnect = new List<char>() { 'ء' });

您需要为正确的列表添加正确的字符。我希望你不必处理Harakat !!!!

سلام,如果您需要澄清,请告诉我