Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配相互关联的阿拉伯语字符_Javascript_Regex - Fatal编程技术网

Javascript 匹配相互关联的阿拉伯语字符

Javascript 匹配相互关联的阿拉伯语字符,javascript,regex,Javascript,Regex,我需要匹配相互连接的阿拉伯语字符以进行如下扩展: بسم الله الرحمن الرحيم "بسم الله الرحمن الرحيم".replace(/(ب|ت|ث|ج|ح|خ|س|ش|ص|ض|ط|ظ|ع|غ|ف|ق|ك|ل|م|ن|ه|ي)(?=\S)/g, "$1ـ"); 变成 بـسـم الـلـه الـرحـمـن الـرحـيـم 有没有一种使用正则表达式的方法可以做到这一点?类似这样的方法如何: بسم الله الرحمن الرحيم "بسم ا

我需要匹配相互连接的阿拉伯语字符以进行如下扩展:

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

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

有没有一种使用正则表达式的方法可以做到这一点?

类似这样的方法如何:

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

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


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

我曾经有一个项目,其中我必须根据字母的位置选择正确的unicode代码进行渲染;因为我使用的系统不符合Unicode,所以它们看起来是连接(或断开)的

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

不幸的是,对于您的情况,最幸运的是对于许多其他情况,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>() { 'ء' });
//前后可以连接的字符列表
var canconnectbeforefafter=new List(){‘ع’、‘ت’、‘ب’、‘ي’/*等等*/};
//只能连接到前面的字符的字符列表(该字符中有一个可以连接到后面的字符!请注意وو)
var cannotConnectAfter=new List(){'qi','و'};
var cannotConnect=new List(){'ء'});
您需要为正确的列表添加正确的字符。我希望你不必处理Harakat


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

非常感谢,您能解释一下吗?哇,绝对比我来的容易with@user3671328,它基本上是在做我想让你手动做的事情。他列出了所有可以连接到前后字符的字符,然后将它们替换为除 之外的字符($1)。@Mzn感谢您的解释,如果我知道我不会修改我的答案:)@user3671328我修改了答案以添加澄清。