2015-04-19 77 views
4

在JavaScript大寫字母,它很容易匹配字母和重音與此正則表達式:JavaScript的正則表達式與口音

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

而且只有小寫字母和重音沒有i選項:

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

但是,匹配只有大寫字母和重音符號的正確正則表達式是什麼

編輯:喜歡的答案已經低於何況,上面也正則表達式其他一些跡象相匹配,並錯過了一些特殊的口音字符,如Y和Y,C和C等等。

回答

5

範圍U+00C0 - U+00DC應該是大寫等效U+00E0 - U+00FC

所以這text.match(/[A-Z\u00C0-\u00DC]+/);應該是你在找什麼。

graphemica這樣的網站可以幫助您確定自己需要的範圍。

編輯像其他答案已經提到,這也匹配一些其他跡象。

+0

感謝您的3個很好的答案!選擇哪一個我很難選擇接受按鈕,所以我選擇了第一個答案。也感謝t-niese和@confusion的鏈接,非常有幫助! – Etienne

4

以大寫更換a-zA-Z\u00E0-\u00FC\u00C0-\u00DC匹配相同的字母爲小寫text.match(/[a-z\u00E0-\u00FC]+/);比賽。

但是
這不是一個正確的實現,既不是小寫字母也不是大寫字母,例如,您的小寫字母匹配包括÷(分隔符號),它根本不是字母,而我的大寫字符串將匹配×(乘號),看起來像一個X,但實際上也不是一個字母。
除此之外,您還缺少ýÝćĆ等許多其他字符。

2

你的第一個正則表達式實際上並不匹配字母和重音符:它只匹配字母和特定的重音字母子集,即Unicode編碼點\u00E0\u00FC之間的那些。該範圍不包括任何大寫字母,但它確實包括例如÷符號和一些通常不被視爲「重音符號」的字母。

根據你實際需要,這可能不是你想要的。如果你真的想匹配所有大寫字母和所有相同口音的大寫字母,你需要使用正則表達式/[A-Z\u00C0-\u00DC]+/,但請檢查如http://unicode-table.com/en/#basic-latin來檢查它是否適合您的需求。

+1

它不包含%符號,即'\ u0025'。不要混淆'%'和'÷'。 – Siguza

+0

是的,已更正。我正在弄清楚如何讓SO顯示那個角色:) – Confusion