我需要一个能与任何语言中的单词匹配的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)每个字母都会被破坏,这对性能不利。我需要修补正则表达式以允许字母,但不是表情符号,或者放置一个捕获所有文本的正则表达式。
编辑:添加了一些示例
编辑:添加语言限制
答案 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's
或doesn't
等单词组合:[\pL\p{Pc}]
< / p>