如何循环遍历字符串并获取每个位置的字符(有些带有重音符号)且重音符号不分隔?

问题描述 投票:0回答:1

我必须获取字符串上每个字符的重音数量,因此我使用

<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>

如何才能像

一样在日志上获得
?,我需要这样做才能与口音数据库中的字符进行比较。预先感谢

javascript utf-8 compare ascii utf-16
1个回答
0
投票

在 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́ 和 ẋ 都将被视为循环中的单个字符。这将使您能够准确地将它们与口音数据库中的条目进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.