首页 > 编程语言 >在JavaScript中移除字符串中的重音符号/变音符号

在JavaScript中移除字符串中的重音符号/变音符号

时间:2023-11-02 20:44:23浏览次数:53  
标签:me JavaScript replace 移除 creme RegExp new brul 重音符号

内容来自 DOC https://q.houxu6.top/?s=在JavaScript中移除字符串中的重音符号/变音符号

如何从字符串中移除重音符号?
特别是在IE6中,我曾经使用过以下代码:

accentsTidy = function(s){
    var r=s.toLowerCase();
    r = r.replace(new RegExp(/\s/g),"");
    r = r.replace(new RegExp(/[àáâãäå]/g),"a");
    r = r.replace(new RegExp(/æ/g),"ae");
    r = r.replace(new RegExp(/ç/g),"c");
    r = r.replace(new RegExp(/[èéêë]/g),"e");
    r = r.replace(new RegExp(/[ìíîï]/g),"i");
    r = r.replace(new RegExp(/ñ/g),"n");                
    r = r.replace(new RegExp(/[òóôõö]/g),"o");
    r = r.replace(new RegExp(/œ/g),"oe");
    r = r.replace(new RegExp(/[ùúûü]/g),"u");
    r = r.replace(new RegExp(/[ýÿ]/g),"y");
    r = r.replace(new RegExp(/\W/g),"");
    return r;
};

但是IE6会报错,似乎它不喜欢我的正则表达式。


使用ES2015/ES6的String.prototype.normalize()方法,

const str = "Crème Brulée"
str.normalize("NFD").replace(/[\u0300-\u036f]/g, "")
> "Creme Brulee"

注意:如果需要将\uFB01)规范化为fi,请使用NFKD

这里发生了两件事:

  1. 将字符串归一化为NFD Unicode规范形式,将组合字形分解为简单字形的组合。Crème中的è变为e + ̀
  2. 使用正则表达式字符类匹配U+0300 → U+036F范围,现在可以全局去除变音符号,这些变音符号由Unicode标准方便地归类为组合变音符号 Unicode块。

截至2021年,还可以使用Unicode属性转义符:

str.normalize("NFD").replace(/\p{Diacritic}/gu, "")

有关性能测试的评论。

或者,如果您只想要排序

Intl.Collator对~95%的字符集提供了足够的支持,而且还有一个polyfill可用here,但我没有测试过它。

const c = new Intl.Collator();
["creme brulee", "crème brulée", "crame brulai", "crome brouillé",
"creme brulay", "creme brulfé", "creme bruléa"].sort(c.compare)
["crame brulai", "creme brulay", "creme bruléa", "creme brulee",
"crème brulée", "creme brulfé", "crome brouillé"]

["creme brulee", "crème brulée", "crame brulai", "crome brouillé"].sort((a,b) => a>b)
["crame brulai", "creme brulee", "crome brouillé", "crème brulée"]

标签:me,JavaScript,replace,移除,creme,RegExp,new,brul,重音符号
From: https://www.cnblogs.com/xiaomandujia/p/17806272.html

相关文章

  • 前端基础之JavaScript
    前端基础之JavaScriptJavaScript概述ECMAScript和JavaScript的关系1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称......
  • JavaScript基础
    引入方式JavaScript程序不能独立运行,它需要被嵌入HTML中,然后浏览器才能执行JavaScript代码。内部引入写在body结束标签的上方。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content=&......
  • JavaScript知识点
    new操作符1、创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型2、属性和方法被加入到this引用的对象中3、新创建的对象由this所引用,并且最后隐式的返回thisAjax原理1、Ajax的原理简单来说是在用户和服务器之间加了一个中间层(AJAX引擎),通过XmiHttpRequest对象来向服......
  • JavaScript 将大数组拆分成多个小数组 循环调用接口
    项目需求:数据列表批量选择提交购物车,一次性提交数据量过大接口会报错,传递的参数是选中数据id的数组。项目运行很久了不做大改动,将提交数据总数限制在2000条以内,每500条走一次接口。思路:1.写一个将大数组拆分多个小数组的方法,arr为大数组,len为要拆分的小数组长度arrGroup(arr,......
  • 掌握JavaScript中数组遍历的7种方法
    作为JavaScript开发人员,熟悉数组的遍历和操作是非常重要的。数组遍历是处理和操作数组元素的基本需求之一。本文将介绍JavaScript中的10种常见数组遍历方法,帮助你成为数组操作的达人。数组的遍历for循环forEach方法for...of循环map方法reduce方法for...in循环filter方法for循环or循......
  • js/javaScript实现金额千分位
    作为前端开发,我们都知道,在实际的需求开发中,难免会遇到需要将接口返回的金额进行千分位格式化的场景。千分位后的金额便于阅读,提升用户体验。金额千分位可以由前端来处理,也可以后端处理后返回给前端展示。下边就来贴一下前端的两种实现方式:方法一:constcheckNaN=(value,cb)=......
  • JavaScript中大于Math.pow(2, 53)的数,如何进行进制转换?精度问题,超过18位的数字如何进
    console.log('JavaScript中大于Math.pow(2,53)的数,如何进行进制转换?')//示例console.group('示例')console.log('使用bignumber.js库完美解决。[https://github.com/MikeMcl/bignumber.js/]')console.log('示例:18446744071545290752转为二进制')console.log......
  • JavaScript操作checkbox的方式
    JavaScript操作checkbox的方式和操作radio的方式相似,都是利用元素项的checked属性来完成。先获取checkbox元素集合,遍历集合,对集合中的每一项做操作。 <body> <p> <labelfor="hobby">Hobby: <inputtype="checkbox"name="hobby"value="reading"/>rea......
  • JavaScript 保存文件
       <scriptsrc="http://cdn.jsdelivr.net/g/filesaver.js"></script><script>functionSaveAsFile(t,f,m){try{varb=newBlob([t],{type:m});saveAs(b,f);}catch(......
  • overflow溢出属性 前端基础之JavaScript
    今日内容详细overflow溢出属性visible 默认值。内容不会被修剪,会呈现在元素框之外。hidden 内容会被修剪,并且其余内容是不可见的。scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。●over......