Javascript unicode(希腊语)正则表达式

发布于 2024-10-31 21:06:09 字数 192 浏览 1 评论 0原文

我想在希腊文本中使用此正则表达式 new RegExp("\b"+pat+"\b") ,但“\b”元字符仅支持 ASCII 字符。

我尝试了 XregExp 库,但我没能解决这个问题。

任何建议将不胜感激。

I would like to use this regular expression new RegExp("\b"+pat+"\b") in greek text but the "\b" metacharacter supports only ASCII characters.

I tried XregExp library but i didnt manage to solve the issue.

Any suggestions would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小嗲 2024-11-07 21:06:09

我认为这对您的回答有帮助。,

<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/

I think this was helpful to your answer.,

<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>

Please refer the following location :
http://xregexp.com/plugins/

杀手六號 2024-11-07 21:06:09

所以答案是,你不能使用 JavaScript 本机机制或任何使用这些机制的库来按照你想要的方式匹配单词。正如您已经说过的, \b 匹配单词。单词必须由单词字符组成。在 JavaScript 中(实际上其他正则表达式实现中,单词字符是 az、AZ、0-9 和 _。但许多其他语言只是以与 JavaScript 不同的方式实现 \b 元字符。

答案“JavaScript”不支持 Unicode”有点简单,事实上完全错误。JavaScript 只是不使用 unicode 作为字符类。如果 JavaScript 不支持 unicode,你甚至不能在字符串文字中使用 unicode 字符,当然这根据

ECMA 262 标准 (ECMAScript)(第 15.10.2.6 节):

[...]
产生式 Assertion :: \ b 通过返回一个采用 State 的内部 AssertionTester 闭包来进行评估
参数 x 并执行以下操作:

  1. 令 e 为 x 的 endIndex。
  2. 调用 IsWordChar(e–1) 并令 a 为布尔结果。
  3. 调用 IsWordChar(e) 并令 b 为布尔结果。
  4. 如果 a 为 true,b 为 false,则返回 true。
  5. 如果 a 为假且 b 为真,则返回 true。
  6. 返回假。
    [..]

抽象操作 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. Return false

这只是表明, \b 使用“isWordChar”算法来检查您尝试匹配的内容是否实际上是一个单词。在“isWordChar”的定义中,您可以看到哪些字符将为“isWordChar”返回 true 的确切定义。

在我看来,这与所使用的字符集完全无关。这里既不兼容 ASCII 也不兼容 UNICODE。就这63个字符。

So the answer is just, that you can not use the JavaScript native mechanisms or any library which uses those mechanisms to match words the way you want to. As you already stated, \b matches words. Words must consists of word characters. And in JavaScript (and actually other regex implementations word characters are a-z, A-Z, 0-9 and _. But many other Languages just implement the \b metacharacter in a different way JavaScript does.

The answer "JavaScript does not support Unicode" is a bit to easy and in fact completely wrong. JavaScript just doesn't use unicode for the character classes. If JavaScript wouldn't support unicode you couldn't even use unicode Characters in String literals and of course this is possible in JavaScript.

According to the ECMA 262 Standard (ECMAScript) (Section 15.10.2.6):

[...]
The production Assertion :: \ b evaluates by returning an internal AssertionTester closure that takes a State
argument x and performs the following:

  1. Let e be x's endIndex.
  2. Call IsWordChar(e–1) and let a be the Boolean result.
  3. Call IsWordChar(e) and let b be the Boolean result.
  4. If a is true and b is false, return true.
  5. If a is false and b is true, return true.
  6. Return false.
    [..]

The abstract operation IsWordChar takes an integer parameter e and performs the following:

  1. If e == –1 or e == InputLength, return false.
  2. Let c be the character Input[e].
  3. If c is one of the sixty-three characters below, return true.
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    0 1 2 3 4 5 6 7 8 9 _
  4. Return false

This just shows, that the \b uses the Algorithm of "isWordChar" to check if what you try to match is actually a word. Int he definition of "isWordChar" you can see the exact definition of which characters will return true for "isWordChar".

In my Opinion this has absolutely nothing to do with the character set being used. It's neither ASCII nor UNICODE compilant here. It's just these 63 characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文