12

この正規表現new RegExp("\b"+pat+"\b")をギリシャ語テキストで使用したいのですが、"\b" メタ文字は ASCII 文字のみをサポートしています。

XregExpライブラリを試しましたが、問題を解決できませんでした。

どんな提案でも大歓迎です。

4

2 に答える 2

4

これはあなたの答えに役立ったと思います。

<script src="xregexp.js"></script>
<script src="xregexp-unicode-base.js"></script>
<script>
    var unicodeWord = XRegExp("^\\p{L}+$");

    unicodeWord.test("Русский"); // true
    unicodeWord.test("日本語"); // true
    unicodeWord.test("العربية"); // true
</script>

<!-- \p{L} is included in the base script, but other categories, scripts,
and blocks require token packages -->
<script src="xregexp-unicode-scripts.js"></script>
<script>
    XRegExp("^\\p{Katakana}+$").test("カタカナ"); // true
</script>

次の場所を参照してください: http://xregexp.com/plugins/

于 2011-05-12T12:45:26.883 に答える
2

したがって、答えは、JavaScript のネイティブ メカニズムや、それらのメカニズムを使用して単語を思いどおりに一致させるライブラリを使用できないということです。すでに述べたように、 \b は単語に一致します。単語は単語文字で構成されている必要があります。JavaScript では (そして実際には、他の正規表現実装の単語文字はaz、AZ、0-9 および _です。しかし、他の多くの言語は、JavaScript とは異なる方法で \b メタ文字を実装しているだけです。

「JavaScript は Unicode をサポートしていません」という答えは少し簡単で、実際には完全に間違っています。JavaScript は、文字クラスに Unicode を使用していません。JavaScript が Unicode をサポートしない場合、文字列リテラルで Unicode 文字を使用することさえできません。もちろん、これは JavaScript で可能です。

ECMA 262 標準(ECMAScript) (セクション 15.10.2.6)によると:

[...] プロダクション Assertion :: \ b は、State 引数 x を取り、以下を実行する内部 AssertionTester クロージャーを返すことによって評価されます。

  1. e を x の endIndex とする。
  2. IsWordChar(e–1) を呼び出し、a をブール値の結果とします。
  3. IsWordChar(e) を呼び出し、b をブール値の結果とします。
  4. a が true で b が false の場合、true を返します。
  5. a が false で b が true の場合、true を返します。
  6. false を返します。[..]

抽象操作 IsWordChar は、整数パラメーター e を受け取り、次の処理を実行します。

  1. e == –1 または e == InputLength の場合、false を返します。
  2. c を文字 Input[e] とする。
  3. c が以下の 63 文字のいずれかである場合、true を返します。abcdefghijklmnopqrstu vwxyz ABCDEFGHIJKLMNOPQRSTU VWXYZ 0 1 2 3 4 5 6 7 8 9 _
  4. false を返す

これは、 \b が「isWordChar」のアルゴリズムを使用して、一致させようとしているものが実際に単語であるかどうかを確認することを示しています。「isWordChar」の定義では、「isWordChar」に対してどの文字が true を返すかの正確な定義を確認できます。

私の意見では、これは使用されている文字セットとはまったく関係ありません。ここでは、ASCII にも UNICODE にも準拠していません。この63文字だけです。

于 2011-05-11T09:43:04.657 に答える