在javascript中从字符串中删除Niqqud

时间:2016-06-09 04:44:54

标签: javascript regex unicode hebrew

我有这里描述的确切问题:

removing Hebrew "niqqud" using r

  

一直在努力去除niqqud(用于表示元音的变音符号或区分希伯来字母的字母的替代发音)。我有这个变量:sample1< - “הֻסְמַק”

     

我找不到有效的方法来删除字母下方的标志。

但在我的情况下,我必须在javascript中执行此操作。

根据here描述的UTF-8值表,我尝试了regex但没有成功。

2 个答案:

答案 0 :(得分:6)

你的正则表达式只是一个小问题。请尝试以下方法:

const input = "הֻסְמַק";
console.log(input)
console.log(input.replace(/[\u0591-\u05C7]/g, ''));

/*
$ node index.js
הֻסְמַק
הסמק
*/

答案 1 :(得分:1)

nj_ 的回答很棒。

补充一点(因为我没有足够的声望点直接评论)-

[\u0591-\u05C7] 可能太宽泛了。请参阅此处的相关表格:https://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet#Compact_table

059x05AX 用于 t'amim(重音/音符)。 Niqud 本身在行 05Bx05Cx 中。

正如 Avraham 评论的那样,如果 2 个词由一个 makaf (05BE) 连接,您可能会遇到问题,然后通过删除它,您最终会得到连贯的词。

如果您只想删除 t'amim 而保留 nikud,请使用 /[\u0591-\u05AF]/g。如果您想避免 Avraham 提出的问题,您有 2 个选择 - 保留 maqaf,或用破折号替换它:

//keep the original makafim
const input = "כִּי־טוֹב"
console.log(input)
console.log(input.replace(/([\u05B0-\u05BD]|[\u05BF-\u05C7])/g,""));

//replace makafim with dashes
console.log(input.replace(/\u05BE/g,"-").replace(/[\u05B0-\u05C7]/g,""))

/*
$ node index.js
כִּי־טֽוֹב
כי־טוב
כי-טוב
*/