JavaScript正则表达式:匹配带有重音符号的大写字母

6
在JavaScript中,使用以下正则表达式可以轻松匹配字母和重音符号
text.match(/[a-z\u00E0-\u00FC]+/i);

仅使用小写字母和重音符号,不带i选项:

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

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

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

4个回答

12

范围U+00C0 - U+00DC应该是U+00E0 - U+00FC的大写等价物。

因此,text.match(/[A-Z\u00C0-\u00DC]+/);应该是您要寻找的内容。

graphemica这样的网站可以帮助您确定所需的范围。

编辑如其他答案已经提到的那样,这也匹配一些其他符号。


感谢三个好答案!很难选择哪一个点击接受按钮,所以我选择了第一个答案。同时也感谢t-niese和@confusion提供的链接,非常有帮助! - Etienne

5

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

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


3
你的第一个正则表达式实际上并没有匹配字母和重音符号:它只匹配字母和一组特定的重音符号,即Unicode代码点\u00E0\u00FC之间的符号。这个范围不包括任何大写字母,但它包括了例如÷标志和一些一般被认为不带有'accented'的字母。
根据你需要做什么,这可能不是你想要的。如果你确实想匹配所有大写字母和具有相同重音符号的大写字母,你需要使用正则表达式/[A-Z\u00C0-\u00DC]+/,但请先查看http://unicode-table.com/en/#basic-latin等网站,以确定它是否适合你的需求。

1
它不包括百分号符号,那是\u0025。不要混淆÷ - Siguza
是的,已经纠正了。我正在想办法让SO显示那个字符 :) - Confusion

0

为了匹配所有大写字母,无论是否带重音,您可以使用以下 Unicode 正则表达式 /\p{Lu}+/u。例如,在 Node REPL 中:

enter image description here

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接