Я использую узел для чтения содержимого файла. Мне нужно сопоставить конкретный оператор импорта, в котором файл выглядит примерно так.
Мне нужно сопоставить только строку или строки, содержащие пакет "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(?:(?!import).)*'foo-bar'
Начните быть более точными в своих описаниях в выкройке. Пример: regex101.com/r/mqyudC/1
Еще идея: var res = str.match(/import {\s*([^}]+)} from 'foo-bar'/)[1]. Также см. эту демонстрацию на regex101



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я решил проблему, с которой вы столкнулись, используя отрицательную группу захвата, которая будет соответствовать как можно большему количеству символов, вплоть до }.
Вот регулярное выражение.
import {[^}]*}.*'foo-bar'
Попробуйте
import[^']+(?= from 'foo-bar')здесь и здесь.