Skip to content

[bug][ios] main.jsbundle Invalid regular expression: Quantifier has nothing to repeat #32453

Description

@aprilmintacpineda

Description

running in ios results to this error: main.jsbundle Invalid regular expression: Quantifier has nothing to repeat

It's referring to this:

var matches = /(?<colorString>[a-f\d]{6}|[a-f\d]{3})/i.exec(hex.toString(16));

I found that there are 2 packages that has this code:

node_modules/pretty-format/node_modules/ansi-styles/index.js
node_modules/expect/node_modules/ansi-styles/index.js

https://github.com/chalk/ansi-styles/blob/main/index.js#L132

I have tried all that I can but can't find a way to fix this.

Version

0.66.1

Output of react-native info

System:
    OS: macOS 11.6
    CPU: (8) x64 Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
    Memory: 439.20 MB / 16.00 GB
    Shell: 5.8 - /bin/zsh
  Binaries:
    Node: 16.11.1 - /var/folders/zg/f6_98ss10lj5b841clyhsxlh0000gn/T/yarn--1634821924400-0.18107403147458956/node
    Yarn: 1.22.16 - /var/folders/zg/f6_98ss10lj5b841clyhsxlh0000gn/T/yarn--1634821924400-0.18107403147458956/yarn
    npm: 8.0.0 - ~/.nvm/versions/node/v16.11.1/bin/npm
    Watchman: 2021.10.11.00 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.10.2 - /Users/aprilmintacpineda/.rvm/gems/ruby-3.0.2/bin/pod
  SDKs:
    iOS SDK:
      Platforms: iOS 15.0, DriverKit 20.4, macOS 11.3, tvOS 15.0, watchOS 8.0
    Android SDK:
      API Levels: 24, 26, 28, 29, 30, 31
      Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
      System Images: android-24 | Google Play Intel x86 Atom, android-26 | Google APIs Intel x86 Atom, android-28 | Google Play Intel x86 Atom, android-29 | Google Play Intel x86 Atom, android-30 | Google APIs Intel x86 Atom, android-30 | Google Play Intel x86 Atom
      Android NDK: Not Found
  IDEs:
    Android Studio: 4.1 AI-201.8743.12.41.6953283
    Xcode: 13.0/13A233 - /usr/bin/xcodebuild
  Languages:
    Java: 1.8.0_292 - /usr/bin/javac
  npmPackages:
    @react-native-community/cli: Not Found
    react: 17.0.2 => 17.0.2
    react-native: 0.66.1 => 0.66.1
    react-native-macos: Not Found
  npmGlobalPackages:
    *react-native*: Not Found

Steps to reproduce

build on ios

Snack, code example, screenshot, or link to a repository

No response

Activity

  1. github-actions commented on Oct 21, 2021

    @github-actions
    ⚠️ Missing Environment Information
    ℹ️ Your issue may be missing information about your development environment. You can obtain the missing information by running react-native info in a console.
  2. aprilmintacpineda commented on Oct 21, 2021

    @aprilmintacpineda
    Author

    ⚠️ Missing Environment Information
    ℹ️ Your issue may be missing information about your development environment. You can obtain the missing information by running react-native info in a console.

    It's already there you dummy.

  3. aprilmintacpineda commented on Oct 21, 2021

    @aprilmintacpineda
    Author

    I found the following packages using pretty-format:

    node_modules/jest-matcher-utils/package.json:    "pretty-format": "^27.3.1"
    node_modules/react-native/package.json:    "pretty-format": "^26.5.2",
    node_modules/jest-circus/package.json:    "pretty-format": "^27.3.1",
    node_modules/@typescript-eslint/scope-manager/package.json:    "pretty-format": "*",
    node_modules/@react-native-community/cli/package.json:    "pretty-format": "^26.6.2",
    node_modules/@react-native-community/cli-server-api/package.json:    "pretty-format": "^26.6.2",
    node_modules/jest-leak-detector/package.json:    "pretty-format": "^27.3.1"
    node_modules/jest-snapshot/package.json:    "pretty-format": "^27.3.1",
    node_modules/jest-message-util/package.json:    "pretty-format": "^27.3.1",
    node_modules/jest-validate/package.json:    "pretty-format": "^27.3.1"
    node_modules/jest-each/package.json:    "pretty-format": "^27.3.1"
    node_modules/metro-config/node_modules/jest-validate/package.json:    "pretty-format": "^26.6.2"
    node_modules/metro-config/package.json:    "pretty-format": "^26.5.2",
    node_modules/jest-jasmine2/package.json:    "pretty-format": "^27.3.1",
    node_modules/jest-diff/package.json:    "pretty-format": "^27.3.1"
    node_modules/jest-config/package.json:    "pretty-format": "^27.3.1"
    

    and these packages using expect:

    node_modules/fast-glob/node_modules/glob-parent/package.json:    "expect": "^1.20.2",
    node_modules/glob-parent/package.json:    "expect": "^26.0.1",
    node_modules/jest-circus/package.json:    "expect": "^27.3.1",
    node_modules/jest-jasmine2/package.json:    "expect": "^27.3.1",
    node_modules/jest-snapshot/package.json:    "expect": "^27.3.1",
    

    Which, consequently uses ansi-styles

  4. aprilmintacpineda commented on Oct 21, 2021

    @aprilmintacpineda
    Author

    Found it, damn, it was the autocomplete, it imported import { validate } from 'jest-validate'; instead of a local file.

  5. yberstad commented on Nov 11, 2021

    @yberstad

    @aprilmintacpineda, I'm experiencing the same issue now.

    I did not quite get how you solved it? Could you please give me a hint?

    Thanks in advance!

  6. yberstad commented on Nov 11, 2021

    @yberstad

    I found a solution, but probably not optimal, anyway here it goes...

    I have considered the following:

    • One suggestion I found was to disable hermes in Podfile for development, but I want have the same environment while developing as in production, so that was no option.
    • Use patch-package, but since there where so many other dependencies and different versions of ansi-styles I thought that would be a hassle to configure.
    • I found it strange that the main.jsbundle would include all npm dev dependencies, but building for production was not an option.

    I used the following two other questions to be able to exclude the ansi-styles package from main.jsbundle:
    #14400 (comment)
    react/metro#519 (comment)

    My metro.config.js:

    const path = require("path");
    
    const blacklistedModules = ["ansi-styles"];
    
    module.exports = {
      transformer: {
        babelTransformerPath: require.resolve("react-native-typescript-transformer"),
      },
      resolver: {
        resolveRequest: (context, moduleName, platform) => {
          if (blacklistedModules.includes(moduleName)) {
            return {
              filePath: path.resolve(__dirname + "/shim-module.js"),
              type: "sourceFile"
            };
          } else {
            return OriginalResolver.resolve(
              { ...context, resolveRequest: undefined },
              moduleName,
              platform
            );
          }
        }
      }
    };
    

    And then add export BUNDLE_CONFIG=./metro.config.js to Bundle React Native code and images.

  7. hatem-72 commented on Nov 12, 2021

    @hatem-72

    Thanks @yberstad for your temporary fix! You saved my day.

    To dig a bit this error is caused by Hermes not supporting Regex Named capture groups. So basically for me both IOS and Android release builds are failing as Hermes is configured on both platforms.
    In my case it happened just after setting up react-native-gesture-handler in my RN 0.66.3 app.

    Now I am wondering what is causing this ansi-styles to be embedded into release builds ?

  8. yberstad commented on Nov 12, 2021

    @yberstad

    Hi @hatem-72!

    Good to know!

    I have also enabled Hermes for Android, but I did not get the same error there? I thought it was only and iOS issue, but when I think of it, I probably should have gotten an error on Android as well. Strange.

    I'm also using "react-native-gesture-handler": "1.10.3".

    build.gradle:

    project.ext.react = [
        entryFile: "index.android.js",
        enableHermes: true,  // clean and rebuild if changing,
        bundleInRelease: true
    ]
    
  9. bombillazo commented on Mar 3, 2022

    @bombillazo

    Hey @hatem-72 , @yberstad , I was able to build my app on Android by disabling Hermes. Previously, I was always able to build no problems but something happened in the repo that now fails any build due to this very line:

    var matches = /(?<colorString>[a-f\d]{6}|[a-f\d]{3})/i.exec(hex.toString(16));

    Did any of you resolve the issue? any clue on how to use turn back on Hermes with RN without getting this error?

  10. Spoutnik97 commented on Mar 4, 2022

    @Spoutnik97

    @aprilmintacpineda could you help us by sharing your fix please?

  11. aprilmintacpineda commented on Mar 4, 2022

    @aprilmintacpineda
    Author

    Found it, damn, it was the autocomplete, it imported import { validate } from 'jest-validate'; instead of a local file.

    This was it in my case, I imported the wrong module.

  12. bombillazo commented on Mar 4, 2022

    @bombillazo

    Hello again, for those looking for a temporary fix, I ended up using patch-package and have this change done to my dependencies. Now it builds with Hermes!

    Hopefully, they merge PR chalk/ansi-styles#80 soon so the library works again without this patch.

  13. jahglow commented on Mar 10, 2022

    @jahglow

    resolved this so far by adding resolution in package.json, probably not the best way, but the least troublesome. for some reason patch-package was complaining for me because it uses the same package

      "resolutions": {
         "ansi-styles": "^4.3.0"
      }
  14. danilobuerger commented on Mar 11, 2022

    @danilobuerger
    Contributor

    Hi, there is another solution by @neildhar:

    yarn add --dev @babel/plugin-transform-named-capturing-groups-regex

    Modify your babel.config.js like so:

    diff --git a/babel.config.js b/babel.config.js
    index f842b77..d855f9b 100644
    --- a/babel.config.js
    +++ b/babel.config.js
    @@ -1,3 +1,4 @@
     module.exports = {
    +  plugins: ['@babel/plugin-transform-named-capturing-groups-regex'],
       presets: ['module:metro-react-native-babel-preset'],
     };

    If you try out this solution could you please report back if that works for you and your setup?

  15. gpbaculio commented on Mar 11, 2022

    @gpbaculio

    Hi, there is another solution by @neildhar:

    yarn add --dev @babel/plugin-transform-named-capturing-groups-regex

    Modify your babel.config.js like so:

    diff --git a/babel.config.js b/babel.config.js
    index f842b77..d855f9b 100644
    --- a/babel.config.js
    +++ b/babel.config.js
    @@ -1,3 +1,4 @@
     module.exports = {
    +  plugins: ['@babel/plugin-transform-named-capturing-groups-regex'],
       presets: ['module:metro-react-native-babel-preset'],
     };

    If you try out this solution could you please report back if that works for you and your setup?

    This worked for me

  16. AmorimRob commented on May 6, 2022

    @AmorimRob

    Hi, there is another solution by @neildhar:

    yarn add --dev @babel/plugin-transform-named-capturing-groups-regex

    Modify your babel.config.js like so:

    diff --git a/babel.config.js b/babel.config.js
    index f842b77..d855f9b 100644
    --- a/babel.config.js
    +++ b/babel.config.js
    @@ -1,3 +1,4 @@
     module.exports = {
    +  plugins: ['@babel/plugin-transform-named-capturing-groups-regex'],
       presets: ['module:metro-react-native-babel-preset'],
     };

    If you try out this solution could you please report back if that works for you and your setup?

    Works for me

  17. nabi-ebrahimi commented on Jun 22, 2022

    @nabi-ebrahimi

    Hi, there is another solution by @neildhar:

    yarn add --dev @babel/plugin-transform-named-capturing-groups-regex

    Modify your babel.config.js like so:

    diff --git a/babel.config.js b/babel.config.js
    index f842b77..d855f9b 100644
    --- a/babel.config.js
    +++ b/babel.config.js
    @@ -1,3 +1,4 @@
     module.exports = {
    +  plugins: ['@babel/plugin-transform-named-capturing-groups-regex'],
       presets: ['module:metro-react-native-babel-preset'],
     };

    If you try out this solution could you please report back if that works for you and your setup?

    I had the same problem when i wanted to build android APK. but it helped me a lot thank you.

  18. rranjan14 commented on Sep 6, 2022

    @rranjan14

    I upgraded from 0.67.4 to 0.70.0. I tried this solution as well for android. Din't work for me.

  19. daileytj commented on Oct 20, 2022

    @daileytj

    I upgraded to RN 0.70.0 and this doesn't work for me. I also tried to use core-js RegExp polyfill, but haven't found success there either.

  20. locked as resolved and limited conversation to collaborators on Oct 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs: AttentionIssues where the author has responded to feedback.Needs: Environment InfoPlease run `react-native info` and edit your issue with that command's output.Platform: iOSiOS applications.Resolution: LockedThis issue was locked by the bot.Tech: Bundler 📦This issue is related to the bundler (Metro, Haul, etc) used.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions