我想在希腊文本中使用这个正则表达式new RegExp("\b"+pat+"\b")但 "\b" 元字符只支持 ASCII 字符。
我尝试了 XregExp库,但我没有设法解决这个问题。
任何建议将不胜感激。
我想在希腊文本中使用这个正则表达式new RegExp("\b"+pat+"\b")但 "\b" 元字符只支持 ASCII 字符。
我尝试了 XregExp库,但我没有设法解决这个问题。
任何建议将不胜感激。
我认为这对您的回答很有帮助。,
<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/
所以答案就是,你不能使用 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 通过返回一个内部 AssertionTester 闭包进行评估,该闭包采用 State 参数 x 并执行以下操作:
抽象操作 IsWordChar 采用整数参数 e 并执行以下操作:
这只是表明,\b 使用“isWordChar”的算法来检查您尝试匹配的内容是否实际上是一个单词。在“isWordChar”的定义中,您可以看到哪些字符将为“isWordChar”返回真值的确切定义。
在我看来,这与所使用的字符集完全无关。这里既不是 ASCII 也不是 UNICODE 兼容的。就是这63个字符。