简体   繁体   中英

Javascript regex to select import statements in react project

I want to search for the import statements of npm packages, but not the local imports,

for eg: I want to search for these types of strings:

import axios from 'axios';
import ApolloLinkTimeout from 'apollo-link-timeout';
import { RestLink } from 'apollo-link-rest';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloClient } from 'apollo-client';
import { ApolloLink } from 'apollo-link';
import { onError } from 'apollo-link-error';

but NOT these:

import { getAllAccounts } from '../../store/actions/actions';
import { CREATE_ACCOUNT_QUERY } from '../queries/AccountsQuery';
import UserContext from '../UserContext';

is this possible using Regex or any other way in javascript I have tried import {[^}]*}.*'foo-bar' but this is not working as expected.

Edit : as per the comments,

^import\s+(?:\{\s*\w+\s*\}|\w+)\s+from\s+['"]([^\/]+?)['"];?$

is working better, but not for the following cases:

import React, { useEffect, useState } from 'react';
import { Col, Modal, ModalHeader, Row } from 'reactstrap';
import { useLazyQuery } from '@apollo/react-hooks';
^import\s.*?\sfrom\s+['"](@[\w\/\-]+|[^.]+?)(?:\/.*?)?['"];?$

Explanation

  • ^ Start of a string
  • import\s.*?\s Match string that starts with import keyword then module default or exports after a space character till to from
  • from\s+ Match from keyword and one or more spaces
  • ['"] Match ' (single quote) or " (double quote) characters
  • ( Capturing group
    • @[\w\/\-]+ Package name should start with @ and can contain word characters (letters, numbers, underscore), / and - characters
    • | Or
    • [^.]+? Package name should contain any character except . (dot)
  • ) Close group
  • (?:\/.*?)? Match package subpaths without capturing (this can exist or not)
  • ['"];? Match close quote and optional ; at the end
  • $ End of a string

See the regex demo and please attention to the last line, it captures only the package name.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM