所以我正在使用React Native 0.64.0。我用纯 JavaScript 编写了这个小程序/函数:
const text = "👨🏻"
if (text.match(/\p{Emoji}/gu) != null) {
if (text.match(/\p{Emoji}/gu).length*2 == text.length && text.match(/\p{Emoji}/gu).length > 0 && text.length/2 <= 3) {
console.log(text)
}
}
在纯 JavaScript 中,它的工作方式正如我所希望的那样。所以现在我想:让我们在我的 React Native 聊天应用程序中实现这个。我做了同样的事情,并在 useEffect() 函数中构建它(首先是为了测试它是否有效):
const text = "👨🏻"
if (text.match(/\p{Emoji}/gu) != null) {
if (text.match(/\p{Emoji}/gu).length*2 == text.length && text.match(/\p{Emoji}/gu).length > 0 && text.length/2 <= 3) {
console.log(text)
}
}
还有一些奇怪的事情。我没有得到 👨🏻 作为输出 - 我什么也没得到。
所以我做了一点改变,只尝试了这个:
console.log("😂".match(/\p{Emoji}/gu))
首先使用纯 Javascript 文件,然后在 React Native 中:
["😂"]
null
所以我现在面临的问题如下:
Emoji 正则表达式在 React Native 中无法按照我想要的方式工作。相同的语句、函数和程序在 React Native 中不起作用,但在 Javascript 中却可以。
可能是什么问题?
可能
u
标志是一个问题,因为它告诉正则表达式匹配 unicode
这对我有用
console.log("😂".match(/(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g))
参考https://projects.iamcal.com/emoji-data/table.htm,你可以
console.log("😂".match(/(\u00A9|\u00AE|\uFE0F|[\u{1F004}-\u{1FAF8}]|[\u203C-\u3299])/u))
如果您使用Hermes,也许您还需要https://babeljs.io/docs/babel-plugin-transform-unicode-property-regex参考https://github.com/facebook/hermes/issues /1460