3

我一直在尝试编写一个匹配所有 unicode 单词字符的正则表达式,例如:

/[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\w]/gi

但这完全失败并且不匹配任何东西。我尝试了各种表达式,似乎只要我尝试指定一个范围,它就会失败。有谁比我幸运?

我希望 actionscript 能提供类似 \p{L} 的东西,但如果有类似的东西,我在文档中找不到它。

4

3 回答 3

3

您可以将 String.fromCharCode 与 unicode 字符一起使用,然后范围将在正则表达式中正常工作。这是使用原始问题的示例:

var exp:RegExp = new RegExp("[" + generateRangeForUnicodeVariables(0x00A0, 0xD7FF) + generateRangeForUnicodeVariables(0xF900, 0xFDCF) + generateRangeForUnicodeVariables(0xFDF0, 0xFFEF) + "\w]", "gi");

private function generateRangeForUnicodeVariables(var1:Object, var2:Object):String
{
   return String.fromCharCode(var1) + "-" + String.fromCharCode(var2);
}
于 2013-04-25T15:59:30.570 回答
1

这一直是一个问题,我找不到任何已解决的信息,之前在:

将输入限制为指定语言

如何在 RegExp 中指定 unicode 范围?

我知道这是一个 hack,但它确实可以在 JavaScript 中使用,因此您可以使用 ExternalInterface 在那里进行测试并将结果传回。

于 2012-05-02T13:24:29.827 回答
0

唔。看起来这不是关于范围,而是关于多字节字符。

这有效:

 var exp:RegExp = new RegExp("[\u00A0-\u0FCF]", "gi");
 var str:String = "\u00A1 \u00A2 \u00A3 \u00A3";
 trace("subject:", str);
 trace("match:", str.match(exp));

这不会:

 var exp:RegExp = new RegExp("[\u00A0-\u0FD0]", "gi");
 var str:String = "\u00A1 \u00A2 \u00A3 \u00A3";
 trace("subject:", str);
 trace("match:", str.match(exp));

无论如何,您可以使用将字符串转换为匹配模式的 RegExp 构造函数。

于 2012-05-02T13:29:47.573 回答