У меня есть следующая строка:
{
blogs(filters: { slug: { eq: "how-to-cook" } }) {
title
urls
description
skills {
title
description
icon{
url
}
}
}
}
Я хочу сопоставить все '{' в конце строки, кроме первого. Следующее получает все '{' в конце строк, но я не могу игнорировать первый.
/((\{)$)/gm
Я также попытался добавить следующее в начало
(?!^)
и
(?=<^)
По сути, я хочу заглянуть и сопоставить это регулярное выражение "/(({)$)/gm" только с "{" перед ним в любом месте строки.
Мои знания о регулярных выражениях все еще довольно новы, поэтому я ценю любую помощь. Заранее спасибо.
В таком случае /(?<!^\s*)\{(?:\n|$)/g
(обратите внимание, флага m
нет)
Если вы используете JavaScript для синтаксического анализа строки, самый простой вариант — захватить их все с помощью регулярного выражения, а затем отфильтровать первое из результата.
Что-то вроде этого
const regex = /\{$/gm
const matches = [...inputString.matchAll(regex)]
.slice(1)
Поскольку вы хотите заменить их, другой подход может работать путем разделения на массив:
const splitted = inputString.split(/\{$/gm)
const output = splitted.slice(0,1)
+ '{' // the first one
+ splitted.slice(1).join('<your replacer>') // the others
Исправлена ошибка
это могло бы сработать, вы знаете, как бы я сделал это с .replace ? то есть string.replace(/\{$/gm, 'заменено')
Ах, это меняет проблему... Вы должны указать, что хотите заменить совпадения в вопросе, чтобы все поняли
Добавлен еще один вариант с использованием разделения строк. Но если вы хотите придерживаться замены, последний комментарий Анубхавы должен подойти
извините, я не знал, что это будет по-другому, я ценю помощь!
Я понимаю, что допустил ошибку, я исправил ее (предыдущая версия дублировала вторую часть строки)
@anubhava, который, кажется, по-прежнему соответствует первому экземпляру, игнорирует его, только если перед первой строкой нет пробелов.