3

すべての有効なスペイン語とアラビア語の単語に一致する正規表現を作成するにはどうすればよいですか。
私が知っている英語では、それはa-zA-z、ヘブライ語ではא-ת、ロシア語А-Яа-яёЁです。
私はJavascriptを使用しています。

4

1 に答える 1

16

英語の単語の範囲a-zA-Zは、容認できないほど単純で素朴です。外来語などに使われているアクセントやその他の特殊なマークが付いたあらゆる種類の文字を省略します。たとえば、最初の文の「ナイーブ」という単語とは一致しません。\p{Latin}代わりに、スクリプトを使用してください。

ヘブライ語の範囲א-תも間違っています。ヘブライ語のプレゼンテーションフォーム、カンチレーションマーク、イディッシュ語の有向グラフなどは省略されています。\p{Hebrew}代わりに、スクリプトを使用してください。

ロシア語の範囲А-Яа-яёЁも不完全で間違っています。\p{Cyrillic}代わりに、スクリプトを使用してください。

スペイン語のアルファベットは、英語と同じ26文字に加えて、ñÑを使用します。ただし、これらを範囲にハードコーディングしないでください。多くのスペイン語の単語はアクセントのある母音を使用しています。\p{Latin}スクリプトを使用してスペイン語の単語を照合します。正規表現は、スペイン語と英語を区別するのに役立ちません。

アラビア語の場合は、\p{Arabic}スクリプトを使用します。

JavaScript、正規表現、およびUnicode

JavaScriptを使用しているとのことですが。残念ながら、JavaScriptはUnicode組み込みをほとんどサポートしていません。JavaScriptでは、 XRegExpライブラリとそのUnicodeアドオンを使用する必要があります。これにより、上記のすべてのUnicodeスクリプトを正規表現で使用できるようになります。

スクリプトとブロック

Unicodeブロックよりも常にUnicodeスクリプトを優先します。ブロックは、特定のスクリプトのコードポイントとの一致が不十分です。ブロックは、不完全な範囲外にある多くの重要なコードポイントを除外することが多く、文字が割り当てられていない多くのコードポイントを含みます。スクリプトには、関連するすべてのコードポイントが含まれ、それ以上は含まれません。

于 2012-06-04T14:46:26.613 に答える