【问题标题】:Specifying a unicode range in an actionscript regular expression在 actionscript 正则表达式中指定 unicode 范围
【发布时间】:2012-05-02 12:44:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: regex actionscript-3 apache-flex actionscript


    【解决方案1】:

    您可以将 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);
    }
    

    【讨论】:

    • 我一直在寻找一种特定于 Flash 的解决方案来查找 unicode 十六进制范围(用于表情符号)。在尝试了许多正则表达式之后,我很高兴地报告您的方法在我的实施中非常有效。最后。
    【解决方案2】:

    这个问题已经有一段时间了,我找不到任何已经解决的信息,之前在:

    Restrict input to a specified language

    How to specify a unicode range in a RegExp?

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

    【讨论】:

    • 如果你真的走我的路,这里有一个链接可以帮助你在 Javascript kourge.net/projects/regexp-unicode-block987654323@ 中构建正则表达式模式
    • 我没有想到ExternalInterface,这是一个非常好的主意!我当前的解决方案同样是一个 hack,因为我只是遍历我的(短)字符串,根据白名单检查每个字符,如果它们不匹配则将其删除。
    【解决方案3】:

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

    这行得通:

     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 构造函数将字符串转换为匹配模式。

    【讨论】:

    • “您可以使用 RegExp 构造函数将字符串转换为匹配模式” - 有趣,您能详细说明一下吗?
    • Emm... 这就是我在使用new RegExp("[\u00A0-\u0FD0]", "gi"); 的测试中实际所做的。尽管对于代码超过\u0FCF 的字符,为什么范围不能按预期工作,但我没有任何线索。
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2021-07-02
    相关资源
    最近更新 更多