次のようなすべてのユニコード単語文字に一致する正規表現を作成しようとしています:
/[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\w]/gi
しかし、これは完全に失敗し、何にも一致しません。さまざまな式を試しましたが、範囲を指定しようとするとすぐに失敗するようです。私より幸運だった人はいますか?
actionscript が \p{L} のようなものを提供してくれればいいのですが、そのようなものがあれば、ドキュメントで見つけることができませんでした。
次のようなすべてのユニコード単語文字に一致する正規表現を作成しようとしています:
/[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\w]/gi
しかし、これは完全に失敗し、何にも一致しません。さまざまな式を試しましたが、範囲を指定しようとするとすぐに失敗するようです。私より幸運だった人はいますか?
actionscript が \p{L} のようなものを提供してくれればいいのですが、そのようなものがあれば、ドキュメントで見つけることができませんでした。
Unicode 文字で String.fromCharCode を使用すると、正規表現で範囲が正しく機能します。元の問題を使用した例を次に示します。
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);
}
これはしばらくの間問題であり、解決されたという情報を見つけることができませんでした。
と
これがハックであることはわかっていますが、JavaScript で動作するため、ExternalInterface を使用してテストを実行し、結果を返すことができます。
うーん。範囲ではなく、マルチバイト文字に関するもののようです。
これは機能します:
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コンストラクターを使用できます。