Как сопоставить контент с регулярным выражением - PullRequest
0 голосов
/ 18 января 2019

У меня есть регулярное выражение как it\(((.|\n)+?)\[8032\]

и содержание как

it(`some text
   some text - [208]`, async () => {
    expect(0).toBe(2);
});



it('some text ' +
    'some text - [8032]', async () => {
    expect(1).toBe(0);
});

Теперь, если я выполню регулярное выражение

Я просто хочу

it('some text ' +
    'some text - [8032]

но, к сожалению, я получаю большее совпадение как

it(`some text
   some text - [208]`, async () => {
    expect(0).toBe(2);
});

it('some text ' +
    'some text - [8032]

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вам нужно иметь отрицательный взгляд вперед (?!it) с (.|\n)+?, поэтому он отклоняет большее совпадение, содержащее текст it, и, следовательно, вам нужно использовать это регулярное выражение,

it\((((?!it\(')(.|\n))+?)\[8032\]

Здесь, в вашем собственном регулярном выражении, единственное добавление, которое я сделал, - это (?!it), который гарантирует, что выбранная строка не содержит it в ней.

Демо

0 голосов
/ 18 января 2019

Вы можете попробовать:

it\([^\[]+?\[8032\]['\"]

Как показано здесь: https://regex101.com/r/G95JCw/1/

Объяснение -

[^\[]+ указывает регулярному выражению сопоставить все символы за исключением '[' до тех пор, пока он не достигнет желаемого [8032] - что решает вашу проблему с предыдущим текстом, который также выбирается.
['\"] в конце - просто выбрать последние кавычки перед асинхронным,Эта часть не нужна, но она немного облегчает извлечение:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...