javascript - 使用 javascript 在正则表达式中使用语言环境字符

标签 javascript regex locale

我想用一个例子更容易解释:

'gracias senor'.match(/\w+/g)
["gracias", "senor"]

但是如果我使用任何非英文字符:

'gracias señor'.match(/\w+/g)
["gracias", "se", "or"]

有什么方法可以考虑 ñ、á é 等字符。

最佳答案

根据 Wikipedia , 西类牙字母表包括:

  • 英文字母表:A-Z, a-z
  • N 带变音波浪号:ñÑ
  • 重音字符:áéíóú , ü(及其对应的大写字符)

因为有两种方法可以指定带变音符号的字符:

  • 单个字形:á
  • 带有组合标记:á ("a\u0341")

您至少需要处理此类情况。值得庆幸的是,西类牙语字符上最多只有 1 个变音符号。

在 Unicode 中,也有分解为英文字母 A-Za-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/

相关文章:

javascript - 如何从可编辑 div 中禁用 ckeditor?

javascript - 如何在 native 导航中使用 route.params 获取路由参数?

c# - 对于 C# 中的匹配,Regex 实例线程是否安全

Android 本地化值-** 文件夹名称

javascript - AngularJS 表达式在 ng-click 中抛出语法错误

javascript - 滚动功能未在我想要的位置触发

php - 无法找出这个正则表达式的解决方案

java - 需要正则表达式的说明(帮助)

java - 以编程方式从 Android 使用首选语言打开 Google Play

android - 根据设备的默认语言更改应用程序的语言