Javascript 可以在js中使用正则表达式来替换几个不同的字符吗?

Javascript 可以在js中使用正则表达式来替换几个不同的字符吗?,javascript,regex,Javascript,Regex,我需要将字符串中的所有重音字符替换为它的非重音版本,以便排序。 我找到了如何匹配重音符号的方法,但是是否可以使用正则表达式来替换每一个呢? 我的意思是: 这是我的照片 但我需要:'uuuuaaeeeiiouuuuaaeieiiouun' 这可能吗? 谢谢您需要使用字符类 var re = /[ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ]/g; 然后,可以将函数作为第二个参数传递给replace函数。该功能应包含转换逻辑。一个简单的方法是使用转换映射 例如 您需要使用

我需要将字符串中的所有重音字符替换为它的非重音版本,以便排序。 我找到了如何匹配重音符号的方法,但是是否可以使用正则表达式来替换每一个呢? 我的意思是:

这是我的照片 但我需要:'uuuuaaeeeiiouuuuaaeieiiouun'

这可能吗?
谢谢

您需要使用字符类

var re = /[ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ]/g;
然后,可以将函数作为第二个参数传递给replace函数。该功能应包含转换逻辑。一个简单的方法是使用转换映射

例如


您需要使用字符类

var re = /[ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ]/g;
然后,可以将函数作为第二个参数传递给replace函数。该功能应包含转换逻辑。一个简单的方法是使用转换映射

例如

基准 我实现了一个2KB文本的基准测试,我的功能比其他答案更快,达到59000次/秒

基准 我实现了一个2KB文本的基准测试,我的功能比其他答案更快,达到59000次/秒


为了便于阅读,这相当冗长。不管怎样,每个人都有自己的

var deaccentuate = (function() {
  var conversion =
      { 'a' : /[äàá]/g
      , 'e' : /[ëèé]/g
      , 'i' : /[ïìí]/g
      , 'o' : /[öòó]/g
      , 'u' : /[üùú]/g
      , 'n' : /ñ/g
      , 'A' : /[ÄÀÁ]/g
      , 'E' : /[ËÈÉ]/g
      , 'I' : /[ÏÌÍ]/g
      , 'O' : /[ÖÒÓ]/g
      , 'U' : /[ÜÙÚ]/g
      , 'N' : /Ñ/g
      }

  return function(str) {
    return Object.keys(conversion).reduce(function(str, c) {
      return str.replace(conversion[c], c)
    }, str)
  }
}())
用法:


其思想是循环转换表的键,并将与该键的模式匹配的任何内容替换为键本身。这当然不是最有效的方法,但除非输入字符串相当长,否则它应该没有多大关系。

为了便于阅读,这相当冗长。不管怎样,每个人都有自己的

var deaccentuate = (function() {
  var conversion =
      { 'a' : /[äàá]/g
      , 'e' : /[ëèé]/g
      , 'i' : /[ïìí]/g
      , 'o' : /[öòó]/g
      , 'u' : /[üùú]/g
      , 'n' : /ñ/g
      , 'A' : /[ÄÀÁ]/g
      , 'E' : /[ËÈÉ]/g
      , 'I' : /[ÏÌÍ]/g
      , 'O' : /[ÖÒÓ]/g
      , 'U' : /[ÜÙÚ]/g
      , 'N' : /Ñ/g
      }

  return function(str) {
    return Object.keys(conversion).reduce(function(str, c) {
      return str.replace(conversion[c], c)
    }, str)
  }
}())
用法:


其思想是循环转换表的键,并将与该键的模式匹配的任何内容替换为键本身。这当然不是最有效的方法,但除非输入字符串相当长,否则它不会有多大影响。

我想不出比使用此方法更容易有效地删除字符串中的所有变音符号的方法

在行动中看到它:

var-str=249;ÙÜÜÜÜèìÜòùÄÀËÍÍÒÚÜÜ; var str_norm=str.normalize'NFD'。替换/[\u0300-\u036f]/g;
console.logstr_norm 我想不出比使用这个更简单的方法来有效地删除字符串中的所有变音符号

在行动中看到它:

var-str=249;ÙÜÜÜÜèìÜòùÄÀËÍÍÒÚÜÜ; var str_norm=str.normalize'NFD'。替换/[\u0300-\u036f]/g;

console.logstr_norm;谢谢,这是它的一部分,现在我得到一个'm'每字符!伟大的现在这个“逻辑”将是另一个正则表达式?我的意思是,如果我在javaScript中使用fors-ifs和switch来构建它,那么首先使用正则表达式是没有好处的,对吗?对不起,如果我对这件事很傻的话。啊!!太好了,我现在明白了。谢谢@v、 replace不修改原始字符串,它返回一个新字符串。字符串是不可变的。我做了散列映射并修改为缓存版本@Vitim.us,请在您评论上方的链接中查看我的。实际上,您也可以缓存replace回调,并且不再需要逻辑| |运算符。谢谢,这是它的一部分,现在每个字符都有一个“m”!伟大的现在这个“逻辑”将是另一个正则表达式?我的意思是,如果我在javaScript中使用fors-ifs和switch来构建它,那么首先使用正则表达式是没有好处的,对吗?对不起,如果我对这件事很傻的话。啊!!太好了,我现在明白了。谢谢@v、 replace不修改原始字符串,它返回一个新字符串。字符串是不可变的。我做了散列映射并修改为缓存版本@Vitim.us,请在您评论上方的链接中查看我的。实际上,您也可以缓存替换回调,并且不再需要逻辑| |运算符。更短,但效率很低。@Vitim.us谢谢,它可以工作,但另一个版本确实更快。@Vitim.us:太好了!我甚至不知道jsperf。我喜欢,谢谢你。与@plalx的差别很小。是的,差别不大,但我只是想知道它是否真的像评论的那样效率低下,似乎不是这样。也有一个小脚印比替换对象。在一天结束时,你是好的,并帮助了我很多。所有答案都是正确的,但我只能将其中一个标记为正确。。。但我可以感谢大家…更短,但效率很低。@Vitim.us谢谢,它可以工作,但另一个版本确实更快。@Vitim.us:太好了!我甚至不知道jsperf。我喜欢,谢谢你。与@plalx的差别很小。是的,差别不大,但我只是想知道它是否真的像评论的那样效率低下,似乎不是这样。也有一个小脚印比替换对象。在一天结束时,你是好的,并帮助了我很多。所有答案都是正确的,但我只能将其中一个标记为正确。。。但我可以谢谢你们所有人……那……我喜欢这个,谢谢。这也让我注意到了减少。您认为这与@plalx?@v.k.提出的上述解决方案存在性能差异。reduce部分将
l没有太大影响,因为在几个项目上循环相当快,但是执行12次替换操作肯定会产生负面影响。然而,在小的输入上它不会被注意到,但是你知道,一旦helper函数被编写,它仍然是独立于实现执行替换操作的一行…@plalx是绝对正确的。关于性能的讨论真的没有意义,因为您的输入可能不够大,不足以产生影响,并且/或者实现可以在不更改接口的情况下进行更改。我喜欢这个,谢谢。这也让我注意到了减少。您认为这与@plalx?@v.k提出的上述解决方案存在性能差异。reduce部分不会有太大影响,因为在几个项目上循环相当快,但是执行12次替换操作肯定会产生负面影响。然而,在小的输入上它不会被注意到,但是你知道,一旦helper函数被编写,它仍然是独立于实现执行替换操作的一行…@plalx是绝对正确的。关于性能的讨论真的没有意义,因为您的输入可能不够大,不足以产生影响,并且/或者实现可以在不更改接口的情况下更改。
var deaccentuate = (function() {
  var conversion =
      { 'a' : /[äàá]/g
      , 'e' : /[ëèé]/g
      , 'i' : /[ïìí]/g
      , 'o' : /[öòó]/g
      , 'u' : /[üùú]/g
      , 'n' : /ñ/g
      , 'A' : /[ÄÀÁ]/g
      , 'E' : /[ËÈÉ]/g
      , 'I' : /[ÏÌÍ]/g
      , 'O' : /[ÖÒÓ]/g
      , 'U' : /[ÜÙÚ]/g
      , 'N' : /Ñ/g
      }

  return function(str) {
    return Object.keys(conversion).reduce(function(str, c) {
      return str.replace(conversion[c], c)
    }, str)
  }
}())
var input = "ùÙüÜäàáëèéïìíöòóüùúÄÀÁËÈÉÏÌÍÖÒÓÜÚñÑ"

console.log(deaccentuate(input))