Как написать регулярное выражение, нацеленное только на первое совпадение в каждой строке?

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

Решение, которое я пытаюсь использовать, включает регулярное выражение cmdF в VSCode. Затем выбираем все найденные совпадения. Пример машинописного кода.

    this.anchorBillingAddress = this.page.getByTestId('billing-address-section');
    this.anchorShippingAddress = this.page.getByTestId('shipping-address-section');
    this.anchorBilling = this.page.getByTestId('billing-section');
    this.anchorGeneral = this.page.getByTestId('general-section');
    this.anchorStatistics = this.page.getByTestId('statistics-section');

Ожидаемый результат:

this.anchorBillingAddress

this.anchorShippingAddress

this.anchorBilling

this.anchorGeneral

this.anchorStatistics

this[^\s]+ это то, что я пробовал. Однако в конечном итоге он также копирует задание. Как мне остановить его на первом пробеле, встречающемся в каждой строке?

Поведение ключевого слова "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
0
81
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете использовать:

  • \b(this\.[A-Za-z0-9_]+)(?=\s*=)
  • \b(this\.\w+)(?=\s*=) или
  • ^\s*\b(this\.[A-Za-z0-9_]+)(?=\s*=)

чтобы найти первый this..

const p = /\b(this\.\w+)(?=\s*=)/gm;
const s = `    this.anchorBillingAddress = this.page.getByTestId(

'billing-address-section'

);
    this.anchorShippingAddress = this.page.getByTestId(

'shipping-address-section'

)

;
    this.anchorBilling = this.page.getByTestId('billing-section');
    this.anchorGeneral = this.page.getByTestId('general-section');
    this.anchorStatistics = this.page.getByTestId('statistics-section');`;

const matches = s.match(p);
if (matches) {
  matches.forEach((match, index) => {
    console.info(`${index}=> ${match}`);
  });
}

Примечание:

  • \s*: 0 или более пробелов.
  • \b: граница слова.
  • (this\.[A-Za-z0-9_]+)(?=\s*=): захватывает от this. до первого \s или =. [A-Za-z0-9_] то же, что \w.
  • (?=\s*=): положительный прогноз, соответствующий шаблону \s*= сразу после this\.[A-Za-z0-9_]+.

Если вы хотите, чтобы он остановился на первом месте, вы можете сделать это

^this[^\s]+

^ следит за тем, чтобы он был с самого начала и не схватил второй this.

Это не сработало. Пишет, что результатов нет.

tem 27.06.2024 18:55

У вас есть другой персонаж до этого? Например, табуляция или пробел? Это регулярное выражение предполагает, что это первый набор символов в строке.

Maldaer 27.06.2024 18:59

да, я знаю, весь этот код инкапсулирован в конструктор класса

tem 27.06.2024 19:21

Ах, ок, и я знаю, что вы уже приняли, но вы могли бы просто добавить пробелы, если это то, что нужно, чтобы ^\s*this[^\s]+ — теперь мне любопытно

Maldaer 27.06.2024 19:35

Я попробовал это, но все равно безуспешно. Это не соответствует ничему на странице.

tem 27.06.2024 20:10

Можешь попробовать /this\.\S+(?=\s*=)/g

Это даст вам все левые части задания, начинающиеся с «this».

const text=`let a = this.currentDate;
this.anchorBillingAddress = this.page.getByTestId('billing-address-section');
// a comment
this.anchorShippingAddress = this.page.getByTestId('shipping-address-section');
let b = this.should.not.be.captured;
console.info(this.property);
this.anchorBilling = this.page.getByTestId('billing-section');
this.anchorGeneral = this.page.getByTestId('general-section');
this.anchorStatistics = this.page.getByTestId('statistics-section');`;

console.info(text.match(/this\.\S+(?=\s*=)/g));

Позитивный просмотр вперед (?=\s*=) гарантирует, что за захваченным текстом должно следовать любое количество пробелов, за которыми следует знак равенства ("=").

Не повезло. Это возвращает «нет результатов»

tem 27.06.2024 19:23

В VS Code сначала скопируйте строки в целевое место назначения, а затем:

  • нажмите Ctrl+H, чтобы открыть всплывающее окно поиска/замены

  • включите поддержку регулярных выражений с помощью Alt+R , если она еще не активна

  • введите ^\s*(this\.\w+).* в поле поиска

  • введите $1 в поле замены:

  • нажмите Ctrl+Alt+Enter, чтобы выполнить замены.

В некотором роде работает. Я не пытаюсь ничем заменить. Но мне удалось скопировать то, что осталось после действия замены, и нажать cmd+Z, чтобы отменить действие.

tem 27.06.2024 19:13

Хорошо, но я вижу, что вы приняли другой ответ, так что, думаю, мой ответ вам не нужен.

trincot 27.06.2024 19:43

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