TL; DR;
Вы можете использовать заглушки для обработки вставки текста перед совпадением, и вы не учитываете пробелы.
function clean() {
const string = document.getElementById("input").value;
const cleaned = string
.replace(/\n/g, "")
.replace(/\s */g, ' ')
.replace(/\*/g, "")
.replace(/@[a-z]+/g, "")
.replace(/({)\s*(?=pm.expect)/g,'$1\n\t')
.replace(/\s*(?=pm.test)/g,'\n')
.replace(/(;)\s*(?=}\);)/g, '$1\n');
document.getElementById("result").textContent = cleaned;
}
Explantaion
Звучит так, как будто вы хотите соответствовать позиции , а нефактический текст.Как и в
, я хочу сопоставить положение между фигурной скобкой у символов pm.expect
.
Многие библиотеки регулярных выражений поддерживают выражения обхода именно для этого сценария.К счастью, Javascript поддерживает прогнозирование.К сожалению, только Chrome поддерживает lookbehinds, но он ведет нас на полпути, а остальное можно сделать с помощью захваченных групп.
Сначала мы сопоставляем фигурную скобку в группе, чтобы мы могли использовать обратную ссылку в строке замены:
({)
Далее мы используем прогноз.Это выражение будет оценивать символы, которые следуют, но оно не будет захватывать их и не будет перемещать указатель вперед.Это выражение будет соответствовать только фигурным скобкам, но оно будет соответствовать только фигурным скобкам, за которыми следует желаемое выражение:
(?=pm.expect)
Если сложить это вместе, мы получим:
({)(?=pm.expect)
ВВ качестве замены вы можете использовать {\n\t
или, если хотите, вы можете использовать обратную ссылку на захваченную группу, $1\n\t
.
Вы также можете использовать прогноз для pm.test
:
(?=pm.test)
Это выражение будет соответствовать строке нулевой длины , поэтому, как правило, позиция перед pm.test
.Если вы сделаете замену, вы, по сути, будете вставлять текст, а не заменять его.
Наконец, вы не приняли во внимание пробелы.Между {
и pm.expect
есть пробел, который не позволяет вашим регулярным выражениям сопоставлять что-либо.