将非拉丁字符更改为字符串中的拉丁字符

时间:2018-03-06 16:01:57

标签: javascript ruby regex

我试图在Ruby中使用正则表达式或在Javascript中匹配包含非英文字符的字符串。

那么有没有办法用字符串“taglichen”替换字符串“täglichen”? 我知道我可以通过以下选项替换非英语字符:

/(?i)t[aä]glichen/

但是对于这个我需要可能的字符字典并将它们全部设置在搜索的单词中。也许有更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

现代红宝石有一个合法的解决方案,使用String#unicode_normalize

"täglichen".unicode_normalize(:nfd).
            codepoints.
            reject(&128.method(:<)).
            pack('U*')
#⇒ "taglichen"

匹配:

"täglichen".unicode_normalize(:nfc) =~ /t[aä]glichen/i
#⇒ 0

需要进行规范化,因为umlaut可能是单个代码点228,也可能是组合变音符[97, 776]。检查一下(尝试复制粘贴到你的REPL中):

"ä" == "ä"
#⇒ false

答案 1 :(得分:0)

你可以做的一件事就是在匹配(https://www.npmjs.com/package/slugify

之前对你的字符串进行重击
Input: "Ich heiße Fred"
Output: "ich-heisse-fred"

如果你不喜欢-字符作为分隔符,你可以更改它,如文档中所述