Регулярное выражение для сопоставления операторов импорта JS

Я использую узел для чтения содержимого файла. Мне нужно сопоставить конкретный оператор импорта, в котором файл выглядит примерно так.

Мне нужно сопоставить только строку или строки, содержащие пакет "foo-bar". Я заинтересован в импорте из этого пакета.

import React, { Component } from 'react'
import { withRouter } from 'react-router-dom'
import { connect } from 'react-redux'
import { foo, bar, fooBar } from 'foo-bar'
import { anotherThing } from 'another-module'

Он также может охватывать несколько таких строк.

import React, { Component } from 'react'
import { withRouter } from 'react-router-dom'
import { connect } from 'react-redux'
import { 
    foo, 
    bar, 
    fooBar 
} from 'foo-bar'
import { anotherThing } from 'another-module'

Я пробовал использовать это регулярное выражение, но оно соответствует всем строкам от "import" до конца строки, содержащей foo-bar. Я хочу сопоставить импорт только с концом строки или строк, заканчивающихся на «foo-bar». Возможно ли это с использованием регулярного выражения JavaScript? Кроме того, если есть лучший способ, кроме использования регулярного выражения, я также открыт для других вариантов

import([\s\S]*?)(?=foo-bar').*

Пример одной строки: https://regex101.com/r/U1j2G6/1

Многострочный пример: https://regex101.com/r/kcA7gd/1

Попробуйте import[^']+(?= from 'foo-bar')здесь и здесь.

Paolo 30.08.2018 00:00

У меня нет причудливых ссылок, но вы можете попробовать этот import(?:(?!import).)*'foo-bar'

Adam H 30.08.2018 00:03

Начните быть более точными в своих описаниях в выкройке. Пример: regex101.com/r/mqyudC/1

Casimir et Hippolyte 30.08.2018 00:52

Еще идея: var res = str.match(/import {\s*([^}]+)} from 'foo-bar'/)[1]. Также см. эту демонстрацию на regex101

bobble bubble 30.08.2018 13:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
3 059
1

Ответы 1

Я решил проблему, с которой вы столкнулись, используя отрицательную группу захвата, которая будет соответствовать как можно большему количеству символов, вплоть до }.

Вот регулярное выражение.

import {[^}]*}.*'foo-bar'

Попробуйте онлайн!

Другие вопросы по теме