14

テキスト内の単語を見つける単純な正規表現があります。

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.

したがって、私は正規表現についての知識が本当に低く、英語やアラビア語などの言語でこれを行うのを手伝ってくれる人がいれば.

4

4 に答える 4

22

\b最初に、 の意味を理解する必要があります。

\b は、「単語境界」と呼ばれる位置で一致するアンカーです。

あなたの場合、探している単語の境界には他のアラビア文字がありません。

正規表現でアラビア文字のみを照合するには、Unicode を使用します。

[\u0621-\u064A]+

または、アラビア文字を直接使用することもできます

[ء-ي]+

上記のコードは、任意のアラビア文字に一致します。それから単語の境界を作成するには、両側で単純に逆にすることができます。

[^ء-ي]ARABIC TEXT[^ء-ي]

上記のコードは、アラビア語の単語の両側にあるアラビア語の文字と一致しないことを意味します。これはあなたの場合に機能します。

あなたが私たちに与えてくれたこの例を考えてみてください。

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

のみを一致させようとしている場合رياض、この単語は検索をرياضةرياضيات、および にも一致させرياضتيます。ただし、上記のコードを追加すると、一致رياضのみが正常に行われます。

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

أآإا1 つのコードで説明したい場合は、次のようなものを使用するか[\u0622\u0623\u0625\u0627]、単純にすべてを角括弧で囲んでリストします[أآإا]。ここに完全なコードがあります

var x = "أنا هنا وانا هناك .. آنا هنا وإنا هناك";
x = x.replace(/([أآإا]نا)/g, '<span style="color:red">$1</span>');
document.write (x);

أ ب ت ث ج: すべてのアラビア文字、すべての分音符号َ ً ُ ٌ ِ ٍ ّ、およびすべてのアラビア数字を含む正規表現で可能なすべてのアラビア文字に一致させたい場合は、次の١٢٣٤٥٦٧٨٩٠正規表現を使用します。 [،-٩]+

Unicode でのアラビア文字のランキングに関する便利なリンク: https://en.wikipedia.org/wiki/Arabic_script_in_Unicode

于 2016-11-22T01:28:03.227 に答える
1

正規表現エンジンでサポートされていないアラビア語のため、これは機能しません。テキスト内の Unicode 文字を検索できます ( Unicode 範囲)。

または、エンコーディングを使用してテキストをユニコードに変換し、何らかの方法で正規表現を作成することもできます (私はこれを試したことはありませんが、動作するはずです)。

于 2016-11-21T23:24:52.327 に答える