正则表达式匹配字母 - 包括非拉丁语,但不包括表情符号

时间:2017-06-27 19:51:12

标签: javascript regex unicode emoji

我需要一个能与任何语言中的单词匹配的javascript正则表达式,但对于表情符号或任何其他字符都是失败的。解决方法:Regular expression to match non-English characters?匹配所有字母加上象形图和表情符号([^\u0000-\u007F]+)。

稍微修改它似乎可以实现我的需要,但我不确定它的安全性:([a-zA-Z]|[^\u0000-\u007F\u200d-\u3299\ud83c-\udfff\ufe0e\ufe0f])+

实施例: America Österreich Россия Ελλάδα

只应匹配字母并在表情符号前停止。不应将表情符号与字母表示匹配,例如:1️⃣#️⃣*️⃣

相关:http://www.unicode.org/Public/emoji/5.0/emoji-variation-sequences.txt

背景: 我试图修补此解析器:https://github.com/Khan/simple-markdown/blob/master/simple-markdown.js#L1304以打破表情符号,因为它目前匹配尽可能多的文本。没有匹配/替换表情符号通过该解析器是有问题的。从突出显示的正则表达式中删除\u00c0-\uffff可以完成我的需要,但是解析器会开始分解单词。有些语言(cyrrillic)每个字母都会被破坏,这对性能不利。我需要修补正则表达式以允许字母,但不是表情符号,或者放置一个捕获所有文本的正则表达式。

编辑:添加了一些示例

编辑:添加语言限制

2 个答案:

答案 0 :(得分:3)

我在这里找到了一个解决方案:https://mathiasbynens.be/notes/es-unicode-property-escapes#word

基本上/[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]/u给定Unicode属性转义支持。

在JavaScript中原生支持\p之前,您可以transpile this regex

答案 1 :(得分:0)

\pL匹配Unicode字母。

您可能希望将该Unicode类别与\p{Pc}(连接符标点符号)结合使用,以便通过使用字符类来捕获it'sdoesn't等单词组合:[\pL\p{Pc}] < / p>