我想用一个例子更容易解释:
'gracias senor'.match(/\w+/g)
["gracias", "senor"]
但是,如果我使用任何非英文字符:
'gracias señor'.match(/\w+/g)
["gracias", "se", "or"]
有没有办法考虑ñ,áé等字符。
最佳答案
根据Wikipedia,西类牙语字母包括:
A-Z
,a-z
ñ
和Ñ
á
,é
,í
,ó
,ú
,ü
(及其对应的大写字符)由于有两种方法可以用变音符指定字符:
á
á
("a\u0341"
)您至少需要处理此类情况。值得庆幸的是,西类牙语在字符上最多只有1个变音标记。
在Unicode中,还有一些字符可分解为英文字母
A-Z
或a-z
。由于JavaScript的RegExp对Unicode的支持不佳,而且无论如何也很少使用它们,因此我忽略了这些情况。因此,要正确匹配西类牙语字母(单个字形和组合标记):
[aeiouAEIOU]\u0341|[uU]\u0308|[nN]\u0303|[a-zA-ZáéíóúüÁÉÍÓÚÜñÑ]
(请注意
i
标志对非US-ASCII字符无效)。回到匹配单词的问题。这取决于您对“文字字符”的定义。
假设一个“单词”(西类牙语)由西类牙语字母和数字
0-9
组成:(?:[aeiouAEIOU]\u0341|[uU]\u0308|[nN]\u0303|[a-zA-ZáéíóúüÁÉÍÓÚÜñÑ0-9])+
测试代码:
'gracias señor señor'.match(/(?:[aeiouAEIOU]\u0341|[uU]\u0308|[nN]\u0303|[a-zA-ZáéíóúüÁÉÍÓÚÜñÑ0-9])+/g).forEach(function(v){console.log(v + " " + v.length)});
输出(匹配的单词和长度):
gracias 7
señor 5
señor 6
关于javascript - 使用javascript在正则表达式中使用区域设置字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21520594/