正则表达式匹配阿拉伯关键字

car*_*ics 6 javascript regex arabic arabic-support

我有简单的正则表达式,可以在文本中找到一些单词:

var patern = new RegExp("\bsomething\b", "gi");
Run Code Online (Sandbox Code Playgroud)

匹配文本中带有空格或标点符号的单词。

所以它匹配:

I have something.
Run Code Online (Sandbox Code Playgroud)

但不匹配:

I havesomething.
Run Code Online (Sandbox Code Playgroud)

什么很好,正是我需要的。

但是我有例如阿拉伯语言的问题。如果我有正则表达式:

var patern = new RegExp("\b?????\b", "gi");
Run Code Online (Sandbox Code Playgroud)

和文字:

????? ??? ??? ?????? ???? ???? ??? ??? ??? ??? 
Run Code Online (Sandbox Code Playgroud)

我要查找的关键字在文本的末尾。

但这是行不通的,只是找不到。

如果我\b从正则表达式中删除它会起作用:

var patern = new RegExp("?????", "gi");
Run Code Online (Sandbox Code Playgroud)

但这就是我想要的,因为如果它是另一个单词的一部分,例如上面的英语示例,我不想找到它:

 I havesomething.
Run Code Online (Sandbox Code Playgroud)

因此,我对正则表达式的了解真的很少,是否有人可以帮助我使用英语和阿拉伯语等语言来工作。

Ibr*_*him 10

我们首先要了解什么\b意思:

\ b是在称为“单词边界”的位置匹配的锚。

在您的情况下,您要查找的边界单词没有其他阿拉伯字母。

为了只匹配正则表达式中的阿拉伯字母,我们使用unicode:

[\u0621-\u064A]+
Run Code Online (Sandbox Code Playgroud)

或者我们可以直接使用阿拉伯字母

[?-?]+
Run Code Online (Sandbox Code Playgroud)

上面的代码将匹配任何阿拉伯字母。为了使单词边界更清晰,我们可以简单地在两侧将其反转:

[^?-?]ARABIC TEXT[^?-?]
Run Code Online (Sandbox Code Playgroud)

上面的代码表示:请不要在您遇到的情况下在阿拉伯语单词的两边匹配任何阿拉伯字符。

考虑一下您给我们的示例,我对此做了一点修改:

 ??? ??? ?????? ???? ????? ??????? ???? ???? ??? ??? 
Run Code Online (Sandbox Code Playgroud)

如果我们试图只匹配????,这个词将使我们的搜索也匹配??????????????????。但是,如果我们添加上面的代码,则匹配将????仅成功进行。

如果您想????用一个代码来说明,则可以使用类似的代码,也可以将[\u0622\u0623\u0625\u0627]所有代码都放在方括号中[????]。这是完整的代码

注意:如果要匹配正则表达式中所有可能的阿拉伯字符,包括所有阿拉伯字母? ? ? ? ?,所有变音符号? ? ? ? ? ? ?和所有阿拉伯数字??????????,请使用此正则表达式: [?-?]+

有关Unicode中阿拉伯字符排名的有用链接:https : //en.wikipedia.org/wiki/Arabic_script_in_Unicode