我一直在尝试编写一个正则表达式,匹配所有Unicode单词字符,类似于:
/[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\w]/gi
但是这种方法完全失败了,没有匹配到任何内容。我尝试了各种表达式,似乎只要指定范围就会失败。有人比我更幸运吗?
我希望ActionScript能够提供类似于\p{L}的东西,但如果有类似的内容,我在文档中找不到它。
/[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\w]/gi
但是这种方法完全失败了,没有匹配到任何内容。我尝试了各种表达式,似乎只要指定范围就会失败。有人比我更幸运吗?
我希望ActionScript能够提供类似于\p{L}的东西,但如果有类似的内容,我在文档中找不到它。
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);
}
嗯。看起来不是关于范围的问题,而是关于多字节字符的。
这个可以正常工作:
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));
new RegExp("[\u00A0-\u0FD0]", "gi")
实际上所做的。然而,我不知道为什么对于代码超过\u0FCF
的字符,范围无法按预期工作。 - Michael Antipin