为什么string.replaceAll()不是Android React Native上的函数?

p8h8hvxi  于 2022-11-20  发布在  Android
关注(0)|答案(3)|浏览(168)

我最近偶然发现了这个问题,虽然在iOS上运行得很好,但无法在Android上运行,即使我使用相同的代码库并并行运行它们。

请注意,(number +'')始终返回一个字符串,并且此代码在iOS上运行。
尝试使用全局标志“g”的正则表达式:
string.replace(/searchString/g, replaceString)
像一些建议的StackOverFlow答案也不起作用。
你们能猜出原因并提供解决方案吗?

waxmsbnn

waxmsbnn1#

另一种方法是使用splitjoin函数执行此操作。

string.split("searchString").join("replaceString");
lstz6jyr

lstz6jyr2#

replace方法在最新的React Native版本中运行良好。请注意,对于字符串变量,需要使用字符串文字(′)而不是引号(“)。

string.replace(`/${searchString}/g`, replaceString);

在以下React Native版本上进行测试:

react-native-cli: 2.0.1
react-native: 0.64.3
brvekthn

brvekthn3#

TL;DR

  • 检查android/应用程序/build.gradle
  • 在项目中搜索:启用爱马仕
  • 更改为:true
  • 清理并重建项目

我的预设值:

project.ext.react = [
    enableHermes: false,  // clean and rebuild if changing
]

变更为:

project.ext.react = [
    enableHermes: true,  // clean and rebuild if changing
]

我也面临着这个问题。它在iOS上运行正常,但在Android上,它会抛出一个错误。
正如OP问题的第一条评论所建议的,@Krismu,我检查爱马仕是否启用。Hermes是一个Javascript引擎,它与React-native捆绑在一起,以确保兼容性和效率。
React-native文档说明默认情况下启用该功能,您可以选择退出。
https://reactnative.dev/docs/hermes#switching-back-to-javascriptcore
然而,我的android/app/build.gradle文件在默认情况下被设置为false,这使得我的android应用程序不使用爱马仕。
这为我解决了这个问题。不需要polyfill,只使用'replace()'或更改任何代码就可以了。
版本信息:

  • “React”:“18.0.0”,
  • “React Native ”:“0.69.7”,

相关问题