javascript - 比较字符串中的非英文字符

标签 javascript node.js string-matching

我需要比较非英文字符串如下

Majsstärkelse unicode - Majsstärkelse

Majsstärkelse unicode - Majsstärkelse



如果我这样比较
if('Majsstärkelse' === 'Majsstärkelse')

一些字符不工作这个比较。所以我试过
const collator = new Intl.Collator('de')
const order = collator.compare('Ü', 'ß')
console.log(order)

但仍然没有成功的结果。我怎样才能做到这一点

最佳答案

您可以使用 String.protoype.normalize规范化等价字符串。

a='Majsst\u{00E4}rkelse'
b='Majssta\u{0308}rkelse'
console.log(a,b)
console.log(a === b)
console.log(a.normalize('NFC')===b.normalize('NFC'))


注意:您拥有的字符串已转义。以上是用于比较未转义的字符串。
首先从 unicode HTML 实体解码的代码:

const decodeUEntities = u=>u.replace(/&#(x[\dA-F]+|\d+);/g,
  (_,u)=>String.fromCodePoint(u[0]==='x'?parseInt(u.substr(1),16):+u))

str1 = decodeUEntities("Majsstärkelse")
str2 = decodeUEntities("Majsstärkelse")

// decode unicode HTML entities, if you want named HTML entities too, find a list of them and add them to the replacement code, for simplicty I will be leaving that out
console.log(str1, str2, str1===str2)

console.log(str1.normalize('NFC'),str2.normalize('NFC'),
            str1.normalize('NFC')===str2.normalize('NFC'))

关于javascript - 比较字符串中的非英文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62391697/

相关文章:

javascript - 检查日期是否在过去的 Javascript

javascript - errmsg : 'Unsupported projection option: $push: { ... }' , 代码 : 2, codeName: 'BadValue' }

node.js - 如何不创建 "cron-out"日志文件?

python - 通过任意映射在列表中查找等价词

c++ - STL字符串比较方法与手动编写的方法之间存在巨大的时间差异

javascript - 具有匹配索引值的两个数组,切换类

javascript - 无法让 unicode 字符正确显示 - Javascript 和 HTML

javascript - 谷歌地图显示多个位置(错误 : locations[i] is undefined)

javascript正则表达式从路径字符串中替换3digitis

node.js - 如何根据现有的 Mongoose 查询检查单个文档?