我想在希腊文中使用这个正则表达式 new RegExp(“\ b”+ pat +“\ b”),但“\ b”元字符仅支持ASCII字符。
我试过XregExp库,但我没有设法解决这个问题。
任何建议都将不胜感激。
答案 0 :(得分: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/
答案 1 :(得分:2)
所以答案是,您不能使用JavaScript本机机制或使用这些机制的任何库以您希望的方式匹配单词。如你所说,\ b匹配单词。单词必须由单词字符组成。在JavaScript(实际上其他正则表达式实现中,单词字符是 a-z,A-Z,0-9和_ 。但是许多其他语言只是以不同的方式实现了\ b元字符。
答案“JavaScript不支持Unicode”有点容易,事实上完全错误。 JavaScript只是不为字符类使用unicode。如果JavaScript不支持unicode,你甚至无法在字符串文字中使用unicode字符,当然这在JavaScript中是可行的。
根据ECMA 262 Standard(ECMAScript)(第15.10.2.6节):
[...] 生产Assertion :: \ b通过返回一个带状态的内部AssertionTester闭包来计算 参数x并执行以下操作:
抽象操作IsWordChar采用整数参数e并执行以下操作:
这只是表明,\ b使用“isWordChar”算法来检查你尝试匹配的是否实际上是一个单词。在他对“isWordChar”的定义中,您可以看到“isWordChar”中哪些字符将返回true的确切定义。
在我的意见中,这与使用的字符集完全无关。这里既不是ASCII也不是UNICODE。这只是63个字符。