Я хочу скопировать огромный список свойств, а не вводить их все заново. Однако я хочу избежать копирования их заданий.
Решение, которое я пытаюсь использовать, включает регулярное выражение 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]+
это то, что я пробовал. Однако в конечном итоге он также копирует задание. Как мне остановить его на первом пробеле, встречающемся в каждой строке?
Вы можете использовать:
\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
.
У вас есть другой персонаж до этого? Например, табуляция или пробел? Это регулярное выражение предполагает, что это первый набор символов в строке.
да, я знаю, весь этот код инкапсулирован в конструктор класса
Ах, ок, и я знаю, что вы уже приняли, но вы могли бы просто добавить пробелы, если это то, что нужно, чтобы ^\s*this[^\s]+ — теперь мне любопытно
Я попробовал это, но все равно безуспешно. Это не соответствует ничему на странице.
Можешь попробовать /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*=)
гарантирует, что за захваченным текстом должно следовать любое количество пробелов, за которыми следует знак равенства ("=").
Не повезло. Это возвращает «нет результатов»
В VS Code сначала скопируйте строки в целевое место назначения, а затем:
нажмите Ctrl+H, чтобы открыть всплывающее окно поиска/замены
включите поддержку регулярных выражений с помощью Alt+R , если она еще не активна
введите ^\s*(this\.\w+).*
в поле поиска
введите $1
в поле замены:
нажмите Ctrl+Alt+Enter, чтобы выполнить замены.
В некотором роде работает. Я не пытаюсь ничем заменить. Но мне удалось скопировать то, что осталось после действия замены, и нажать cmd+Z, чтобы отменить действие.
Хорошо, но я вижу, что вы приняли другой ответ, так что, думаю, мой ответ вам не нужен.
Это не сработало. Пишет, что результатов нет.