提问人:Luis Gallego 提问时间:10/7/2023 最后编辑:Luis Gallego 更新时间:10/7/2023 访问量:51
如何遍历字符串并让字符处于每个位置(有些带有重音),重音不分开?
How to loop through a string and get the character in each position (some with accents) with the accents not sepparated?
问:
我必须获取字符串上每个字符的重音数量,因此我正在循环遍历标签文本的字符,我无法将某些重音字符与重音数据库中的字符进行比较,因为它们被拆分为字符和重音,但其他一些重音字符被视为一个字符。<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>
我怎样才能像 ?,我需要这样做才能与 Accents DB 中的字符进行比较。提前致谢x́
ẋ
答:
2赞
Jamie Hutber
10/7/2023
#1
要确定一个字符是否是组合标记,我们可以使用其 Unicode 值。许多组合标记位于 U+0300 到 U+036F(组合变音符号块)范围内,其他组合标记位于其他各种块中,但出于许多语言的目的,此范围将涵盖常见的变音符号。
下面是一个基本实现:
function splitIntoGraphemes(text) {
let graphemes = [];
let currentGrapheme = "";
for (let char of text) {
// Check if the character is a combining mark
const codePoint = char.codePointAt(0);
if (codePoint >= 0x0300 && codePoint <= 0x036F) {
currentGrapheme += char;
} else {
if (currentGrapheme) {
graphemes.push(currentGrapheme);
}
currentGrapheme = char;
}
}
// Push any remaining grapheme
if (currentGrapheme) {
graphemes.push(currentGrapheme);
}
return graphemes;
}
$("button").on("click", function() {
const text = $(".text").text();
// Not sure if you want them, but you could filter out spaces etc here with a regex/replace too if you needed
const graphemes = splitIntoGraphemes(text);
for (const grapheme of graphemes) {
console.log(grapheme);
}
});
这种方法会将许多基本字符和变音符号的组合视为单个字素。但是,请注意,此方法仅处理组合标记的子集,可能无法处理所有可能的组合字符。如果您正在处理可能包含各种变音符号或其他组合标记的文本,那么库会更彻底。
尽管如此,这应该适用于您的示例和许多涉及常见变音符号的典型用例。
评论
1赞
Luis Gallego
10/7/2023
使用此代码,它仍然记录 x 和 ' sepparated
1赞
Jamie Hutber
10/7/2023
我已经更新了答案,以匹配它。正如你所看到的,我也改变了方法。
0赞
Luis Gallego
10/7/2023
你的上一版确实很好用,为什么你说它只包含几个变音符号?
1赞
Luis Gallego
10/7/2023
我认为即使这样也会得到以下代码的支持:unicode.org/reports/tr15/#Multiple_Mark_Figure
评论
x
ᶍ
ẋ
ẍ
ꭖ
ꭗ
ꭘ
ꭙ
)