Regex Игнорировать первый экземпляр совпадения

У меня есть следующая строка:

  {
    blogs(filters: { slug: { eq: "how-to-cook" } }) {
        title
        urls
        description
        skills {
            title
            description
            icon{
                url
            }
        }
    }
}

Я хочу сопоставить все '{' в конце строки, кроме первого. Следующее получает все '{' в конце строк, но я не могу игнорировать первый.

/((\{)$)/gm

Я также попытался добавить следующее в начало

(?!^)

и

(?=<^)

По сути, я хочу заглянуть и сопоставить это регулярное выражение "/(({)$)/gm" только с "{" перед ним в любом месте строки.

Мои знания о регулярных выражениях все еще довольно новы, поэтому я ценю любую помощь. Заранее спасибо.

@anubhava, который, кажется, по-прежнему соответствует первому экземпляру, игнорирует его, только если перед первой строкой нет пробелов.

John Smith 16.05.2022 19:28

В таком случае /(?<!^\s*)\{(?:\n|$)/g (обратите внимание, флага m нет)

anubhava 16.05.2022 19:45
Поведение ключевого слова "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
2
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы используете 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, 'заменено')

John Smith 16.05.2022 19:26

Ах, это меняет проблему... Вы должны указать, что хотите заменить совпадения в вопросе, чтобы все поняли

gui3 16.05.2022 19:36

Добавлен еще один вариант с использованием разделения строк. Но если вы хотите придерживаться замены, последний комментарий Анубхавы должен подойти

gui3 16.05.2022 19:50

извините, я не знал, что это будет по-другому, я ценю помощь!

John Smith 16.05.2022 20:10

Я понимаю, что допустил ошибку, я исправил ее (предыдущая версия дублировала вторую часть строки)

gui3 16.05.2022 21:57

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