React Native JavaScript Emoji 正则表达式问题

问题描述 投票:0回答:2

所以我正在使用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 中:

  • 在纯 Javascript 中它工作得很好,输出是:
    ["😂"]
  • 在 React Native 中它不起作用。输出是这样的:
    null

所以我现在面临的问题如下:

Emoji 正则表达式在 React Native 中无法按照我想要的方式工作。相同的语句、函数和程序在 React Native 中不起作用,但在 Javascript 中却可以。

可能是什么问题?

javascript reactjs react-native
2个回答
0
投票

可能

u
标志是一个问题,因为它告诉正则表达式匹配 unicode

这对我有用

console.log("😂".match(/(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g))

0
投票

参考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

© www.soinside.com 2019 - 2024. All rights reserved.