【问题标题】:JavaScript Regex for capitalized letters with accents带有重音符号的大写字母的 JavaScript 正则表达式
【发布时间】:2015-04-19 14:10:01
【问题描述】:

在 JavaScript 中,很容易将 字母和重音符号与此正则表达式匹配:

text.match(/[a-z\u00E0-\u00FC]+/i);

只有小写字母和重音符号,不带i 选项:

text.match(/[a-z\u00E0-\u00FC]+/);

但是,只匹配大写字母和重音符号的正确正则表达式是什么?

编辑:就像下面已经提到的答案一样,上面的正则表达式也匹配其他一些符号,并且遗漏了一些特殊的重音字符,如 ý 和 Ý、ć 和 Ć 等等。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    U+00C0 - U+00DC 的范围应该是 U+00E0 - U+00FC 的大写等效项

    所以这个text.match(/[A-Z\u00C0-\u00DC]+/); 应该是你要找的。​​p>

    graphemica 之类的网站可以帮助您确定自己需要的范围。

    EDIT 就像已经提到的其他答案一样,这也与其他一些迹象相匹配。

    【讨论】:

    • 感谢 3 个很好的答案!很难选择我将单击接受按钮的哪个,所以我选择了第一个答案。还要感谢 t-niese 和 @confusion 提供的链接,非常有帮助!
    【解决方案2】:

    a-z 替换为A-Z,将\u00E0-\u00FC 替换为\u00C0-\u00DC,以匹配相同的大写字母,而text.match(/[a-z\u00E0-\u00FC]+/); 匹配小写。

    但是
    这不是一个正确的实现,无论是小写还是大写字母,例如,您的小写匹配包括÷(除号),它根本不是字母,而我的大写字符串将匹配×(乘号),看起来像 X,但实际上也不是字母。
    除此之外,您还缺少 ýÝćĆ 以及许多其他字符。

    【讨论】:

      【解决方案3】:

      您的第一个正则表达式实际上并不匹配字母和重音:它只匹配字母和重音字母的特定子集,即 unicode 代码点 \u00E0\u00FC 之间的那些。此范围不包括任何大写字母,但确实包括例如÷ 符号和一些通常不被视为“重音”的字母。

      根据您的实际需要,这可能不是您想要的。如果你真的想匹配所有大写字母和所有具有相同重音的大写字母,你需要正则表达式/[A-Z\u00C0-\u00DC]+/,但请检查例如http://unicode-table.com/en/#basic-latin 看看是否适合你的需求。

      【讨论】:

      • 它不包括 % 符号,即\u0025。不要混淆%÷
      • 是的,已更正。我正在弄清楚如何让 SO 显示该字符:)
      【解决方案4】:

      要匹配所有大写字母,无论是否带重音,您可以使用以下 unicode 正则表达式 /\p{Lu}+/u。比如在节点repl中:

      请注意,这也将匹配非拉丁字母,例如示例中的大写希腊字母 Δ。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        相关资源
        最近更新 更多