我必须获取字符串上每个字符的重音数量,因此我使用
<h2>
循环遍历 contenteditable= true
标签的文本字符,我无法将某些重音字符与中的字符进行比较重音数据库,因为它们被分为字符和重音,但其他一些重音字符被视为一个字符。
let Accents= {
/*...*/
'x': [
["x", 0],
["́x́", 1],
["̂x̂", 2],
["ẍ", 2],
["̌x̌", 2],
["ẋ", 1],
["̧x̧", 1], //
["̱x̱", 1],
["̣x̣", 1],
["ᶍ", 2]
],
/*...*/
}
$("button").on("click", function(){
text= $(".text").text()
for(e in text){
console.log(text[e])
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2 class= "text" contenteditable= "true">Lorem Ipx́um ẋ</h2>
<button>Log each character</button>
如何才能像
x́
一样在日志上获得 ẋ
?,我需要这样做才能与口音数据库中的字符进行比较。预先感谢
在 Javascript 中,一些 Unicode 字符使用两个代码单元表示,特别是那些带有组合标记的代码单元,例如“x”后跟其重音符号。这些被称为“代理对”。要正确处理此类字符,您可以使用 JavaScript
String.prototype[Symbol.iterator]
或带有数组的扩展运算符。
以下是如何修改代码以正确循环每个字素簇(包括基本字符及其组合标记):
let Accents = {
/*...*/
'x': [
["x", 0],
["́x́", 1],
["̂x̂", 2],
["ẍ", 2],
["̌x̌", 2],
["ẋ", 1],
["̧x̧", 1], //
["̱x̱", 1],
["̣x̣", 1],
["ᶍ", 2]
],
/*...*/
}
$("button").on("click", function(){
text = $(".text").text()
// Use spread operator to break the string into individual grapheme clusters
for(const char of [...text]){
console.log(char)
}
});
现在,通过这种方法,x́ 和 ẋ 都将被视为循环中的单个字符。这将使您能够准确地将它们与口音数据库中的条目进行比较。