2016-11-21 109 views
3

我有簡單的正則表達式,其創建於文字一些字:正則表達式匹配阿拉伯語關鍵詞

var patern = new RegExp("\bsomething\b", "gi"); 

與周圍的空格或標點符號文本這場比賽字。

所以匹配:

I have something. 

但不匹配:

I havesomething. 

什麼是優雅而正是我需要的。

但我有例如阿拉伯語問題。如果我有正則表達式:

var patern = new RegExp("\bرياضة\b", "gi"); 

和文字:

رياضة أنا أحب رياضتي وأنا سعيد حقا هنا لها حبي 

,我正在尋找的關鍵詞是在文本的末尾。

但是,這並不工作,它只是沒有找到它。

它的工作原理,如果我從正則表達式刪除\b

var patern = new RegExp("رياضة", "gi"); 

但是,這是我現在想要什麼,因爲我不想要找到它,如果它是另一個字的一部分就像在英文上面的例子:

I havesomething. 

所以,我真的有關於正則表達式的低知識,如果有人能幫助我與英國和歐洲語言,如阿拉伯語工作這一點。

回答

0

這並不是因爲它不支持正則表達式引擎阿拉伯語的工作。 您可以搜索文本(Unicode ranges)的unicode字符。

或者您可以使用encoding將文本轉換爲unicode,然後以某種方式使正則表達式(我從來沒有嘗試過,但它應該工作)。

2

我們先來了解什麼呢\b平均:

\ b爲的是在被稱爲「單詞邊界」位置相匹配的錨。

對於您的情況,您要查找的單詞邊界沒有其他阿拉伯字母。

要匹配的正則表達式只有阿拉伯字母,我們使用unicode:

[\u0621-\u064A]+ 

這上面的代碼將匹配任何阿拉伯字母。爲了讓一個字邊界出來,我們可以簡單地扭轉它兩側:

[^\u0621-\u064A]ARABIC TEXT[^\u0621-\u064A] 

上面的代碼的意思是:不匹配的阿拉伯語單詞的兩側任何阿拉伯字符,這將在你的工作情況。

下面這個例子,你給我們,我修改了一點:

أنا أحب رياضتي رياض رياضة رياضيات وأنا سعيد حقا هنا 

假設我們正在嘗試只رياض匹配,但這個詞將使我們的搜索匹配也رياضةرياضياترياضتي。但是,如果我們添加上面的代碼,則匹配將僅在رياض上成功。

var x = " أنا أحب رياضتي رياض رياضة رياضيات وأنا سعيد حقا هنا "; 
 
x = x.replace(/([^\u0621-\u064A]رياض[^\u0621-\u064A])/g, '<span style="color:red">$1</span>'); 
 
document.write (x);