用于匹配字符串的 JavaScript 正则表达式包含阿拉伯特殊字符符号 'ـ' U0640



我需要一个javascript正则表达式,它可以找到包含"qd"的阿拉伯语文本,例如:

如果我搜索这个词:الله

输出将发现:الله

اللـه

الـله

الـلـه

将其与下一个突出显示文本的脚本一起使用。

请参阅此演示。


更新:假设我想用英语搜索这个字符串:

"中空的";

我想要一个正则表达式能够找到单词:"中空的";还要查找包含此符号的单词"在Unicode中是u0640,例如:

";h"o"l"l"o"w"

或重复

";h

现在,我之前提到的脚本可以在阿拉伯语中找到并突出显示变音符号和非变音符号文本,也可以在英语中找到重音和非重音敏感文本

例如,脚本可以找到:

带变音符号的文本:";و

不带变音符号的相同文本:";وديناالددا\1606Bب

同样是不区分重音的英语:

";séléction:可以找到

";选择":可以发现它的大写字母太小无所谓

通过使用xregex,我可以通过以下代码完成映射:

 var charToAccentedCharClassMap = {
// for arabic
"u0623":'([u0627u0625u0622u0623]\p{Mn}+|[u0627u0625u0622u0623])',
"u0627":'([u0627u0625u0622u0623]\p{Mn}+|[u0627u0625u0622u0623])',
"u0625":'([u0627u0625u0622u0623]\p{Mn}+|[u0627u0625u0622u0623])',
"u0622":'([u0627u0625u0622u0623]\p{Mn}+|[u0627u0625u0622u0623])',
"u06D6":'(u06D6\p{Mn}+|u06D6)',
"u0628":'(u0628\p{Mn}+|u0628)',
"u062A":'(u062A\p{Mn}+|u062A)',
"u062B":'(u062B\p{Mn}+|u062B)',
"u062C":'(u062C\p{Mn}+|u062C)',
"u062D":'(u062D\p{Mn}+|u062D)',
"u062E":'(u062E\p{Mn}+|u062E)', 
"u062F":'(u062F\p{Mn}+|u062F)',
"u0630":'(u0630\p{Mn}+|u0630)',
"u0631":'(u0631\p{Mn}+|u0631)',
"u0632":'(u0632\p{Mn}+|u0632)',
"u0633":'(u0633\p{Mn}+|u0633)',
"u0634":'(u0634\p{Mn}+|u0634)',
"u0635":'(u0635\p{Mn}+|u0635)',
"u0636":'(u0636\p{Mn}+|u0636)',
"u0637":'(u0637\p{Mn}+|u0637)',
"u0638":'(u0638\p{Mn}+|u0638)',
"u0639":'(u0639\p{Mn}+|u0639)',
"u063A":'(u063A\p{Mn}+|u063A)',
"u0641":'(u0641\p{Mn}+|u0641)',
"u0642":'(u0642\p{Mn}+|u0642)',
"u0643":'(u0643\p{Mn}+|u0643)',
"u0644":'(u0644\p{Mn}+|u0644)',
"u0645":'(u0645\p{Mn}+|u0645)',
"u0646":'(u0646\p{Mn}+|u0646)',
"u0647":'(u0647\p{Mn}+|u0647)',
"u064A":'(u064A\p{Mn}+|u064A)',
"u0649":'(u0649\p{Mn}+|u0649)',
"u0626":'(u0626\p{Mn}+|u0626)',
"u0621":'(u0621\p{Mn}+|u0621)',
"u0629":'(u0629\p{Mn}+|u0629)',
"u0648":'([u0624u0648]\p{Mn}+|[u0624u0648])',
"u0624":'([u0624u0648]\p{Mn}+|[u0624u0648])',
"u0640":'([u0640]\p{Mn}+|[u0640])',
  // for other languages
'A':'[Aaxaaxc0xc5xe0xe5u0100u0105u01cdu01ceu0200u0203u0226u0227u1d2cu1d43u1e00u1e01u1e9au1ea0u1ea3u2090u2100u2101u213bu249cu24b6u24d0u3371u3374u3380u3384u3388u3389u33a9u33afu33c2u33cau33dfu33ffuff21uff41]',
'B' : '[Bbu1d2eu1d47u1e02-u1e07u212cu249du24b7u24d1u3374u3385-u3387u33c3u33c8u33d4u33dduff22uff42]',
'C' : '[Ccxc7xe7u0106-u010du1d9cu2100u2102u2103u2105u2106u212du216du217du249eu24b8u24d2u3376u3388u3389u339du33a0u33a4u33c4-u33c7uff23uff43]',
'D' : '[Ddu010eu010fu01c4-u01c6u01f1-u01f3u1d30u1d48u1e0a-u1e13u2145u2146u216eu217eu249fu24b9u24d3u32cfu3372u3377-u3379u3397u33ad-u33afu33c5u33c8uff24uff44]',
'E' : '[Eexc8-xcbxe8-xebu0112-u011bu0204-u0207u0228u0229u1d31u1d49u1e18-u1e1bu1eb8-u1ebdu2091u2121u212fu2130u2147u24a0u24bau24d4u3250u32cdu32ceuff25uff45]',
'F' : '[Ffu1da0u1e1eu1e1fu2109u2131u213bu24a1u24bbu24d5u338a-u338cu3399ufb00-ufb04uff26uff46]',
'G' : '[Ggu011c-u0123u01e6u01e7u01f4u01f5u1d33u1d4du1e20u1e21u210au24a2u24bcu24d6u32ccu32cdu3387u338d-u338fu3393u33acu33c6u33c9u33d2u33ffuff27uff47]',
'H' : '[Hhu0124u0125u021eu021fu02b0u1d34u1e22-u1e2bu1e96u210b-u210eu24a3u24bdu24d7u32ccu3371u3390-u3394u33cau33cbu33d7uff28uff48]',
'I' : '[Iixcc-xcfxec-xefu0128-u0130u0132u0133u01cfu01d0u0208-u020bu1d35u1d62u1e2cu1e2du1ec8-u1ecbu2071u2110u2111u2139u2148u2160-u2163u2165-u2168u216au216bu2170-u2173u2175-u2178u217au217bu24a4u24beu24d8u337au33ccu33d5ufb01ufb03uff29uff49]',
'J' : '[Jju0132-u0135u01c7-u01ccu01f0u02b2u1d36u2149u24a5u24bfu24d9u2c7cuff2auff4a]',
'K' : '[Kku0136u0137u01e8u01e9u1d37u1d4fu1e30-u1e35u212au24a6u24c0u24dau3384u3385u3389u338fu3391u3398u339eu33a2u33a6u33aau33b8u33beu33c0u33c6u33cd-u33cfuff2buff4b]',
'L' : '[Llu0139-u0140u01c7-u01c9u02e1u1d38u1e36u1e37u1e3a-u1e3du2112u2113u2121u216cu217cu24a7u24c1u24dbu32cfu3388u3389u33d0-u33d3u33d5u33d6u33ffufb02ufb04uff2cuff4c]',
'M' : '[Mmu1d39u1d50u1e3e-u1e43u2120u2122u2133u216fu217fu24a8u24c2u24dcu3377-u3379u3383u3386u338eu3392u3396u3399-u33a8u33abu33b3u33b7u33b9u33bdu33bfu33c1u33c2u33ceu33d0u33d4-u33d6u33d8u33d9u33deu33dfuff2duff4d]',
'N' : '[Nnxd1xf1u0143-u0149u01ca-u01ccu01f8u01f9u1d3au1e44-u1e4bu207fu2115u2116u24a9u24c3u24ddu3381u338bu339au33b1u33b5u33bbu33ccu33d1uff2euff4e]',
'O' : '[Ooxbaxd2-xd6xf2-xf6u014c-u0151u01a0u01a1u01d1u01d2u01eau01ebu020c-u020fu022eu022fu1d3cu1d52u1ecc-u1ecfu2092u2105u2116u2134u24aau24c4u24deu3375u33c7u33d2u33d6uff2fuff4f]',
'P' : '[Ppu1d3eu1d56u1e54-u1e57u2119u24abu24c5u24dfu3250u3371u3376u3380u338au33a9-u33acu33b0u33b4u33bau33cbu33d7-u33dauff30uff50]',
'Q' : '[Qqu211au24acu24c6u24e0u33c3uff31uff51]',
'R' : '[Rru0154-u0159u0210-u0213u02b3u1d3fu1d63u1e58-u1e5bu1e5eu1e5fu20a8u211b-u211du24adu24c7u24e1u32cdu3374u33ad-u33afu33dau33dbuff32uff52]',
'S' : '[Ssu015a-u0161u017fu0218u0219u02e2u1e60-u1e63u20a8u2101u2120u24aeu24c8u24e2u33a7u33a8u33ae-u33b3u33dbu33dcufb06uff33uff53]',
'T' : '[Ttu0162-u0165u021au021bu1d40u1d57u1e6a-u1e71u1e97u2121u2122u24afu24c9u24e3u3250u32cfu3394u33cfufb05ufb06uff34uff54]',
'U' : '[Uuxd9-xdcxf9-xfcu0168-u0173u01afu01b0u01d3u01d4u0214-u0217u1d41u1d58u1d64u1e72-u1e77u1ee4-u1ee7u2106u24b0u24cau24e4u3373u337auff35uff55]',
'V' : '[Vvu1d5bu1d65u1e7c-u1e7fu2163-u2167u2173-u2177u24b1u24cbu24e5u2c7du32ceu3375u33b4-u33b9u33dcu33deuff36uff56]',
'W' : '[Wwu0174u0175u02b7u1d42u1e80-u1e89u1e98u24b2u24ccu24e6u33ba-u33bfu33dduff37uff57]',
'X' : '[Xxu02e3u1e8a-u1e8du2093u213bu2168-u216bu2178-u217bu24b3u24cdu24e7u33d3uff38uff58]',
'Y' : '[Yyxddxfdxffu0176-u0178u0232u0233u02b8u1e8eu1e8fu1e99u1ef2-u1ef9u24b4u24ceu24e8u33c9uff39uff59]',
'Z' : '[Zzu0179-u017eu01f1-u01f3u1dbbu1e90-u1e95u2124u2128u24b5u24cfu24e9u3390-u3394uff3auff5a]'
};

然后我改进了脚本,发现字符串包含单词之间的符号,只忽略整个字符串的开头和结尾:

例如:

如果我键入:"你好世界"

结果会发现:

";你好世界"

";你好<gt;:;'".,#%^@)(世界"

使用此代码:

 var inputPattern = XRegExp('('+input.split(' ').join('[\s\p{P}\p{S}\p{m}]+')+')',"g");

p{p}:将查找所有标点

p{S}:将查找所有符号

p{m}:将找到所有变音符号

剩下的最后一件事是找出答案,让剧本能够找到单词包含一个特殊字符"",该字符用于某些quranic阿拉伯语文本

例如:

بõماللهبين

当添加""时,它将是:

ب

我不知道怎么做。

查看脚本的实际工作方式:

演示。


借助trincot解决这是最终结果:

演示。

您可以在每个非空格字符后添加以下regex模式:u0640*。它将允许任何数量的tatweel字符出现在任何非空格字符之后。

您已经使用以下调用对非空格字符执行了匹配:

var regexp = cleanString.replace(/S/g, accentReplacer);

因此,函数accentReplacer可能是应用这种修改的最佳位置:

var accentReplacer = function(character) {
    var h = charToAccentedCharClassMap[character] || character;
    return h + 'u0640*';
};

最新更新