Регулярное выражение для GraphQL не возвращает результаты при добавлении в компонент react

#reactjs #regex #graphql #graphql-js #graphiql

Вопрос:

Я тестировал запросы с помощью GraphiQL explorer, который возвращал нужные мне результаты, используя регулярное выражение, выделенное красным цветом ниже.

введите описание изображения здесь

Вы можете видеть, что он возвращает результаты и генерирует код для react в крайнем правом углу снимка экрана. Я надеялся, что это сразу сработает с копированием и вставкой, но, по-видимому, вам нужно избежать регулярного выражения в строке литерала шаблона (почему обозреватель кода не делает этого, если вам все равно нужно его избежать?)

Ниже приведены результаты, если вы попытаетесь добавить код так, как он был сгенерирован.

введите описание изображения здесь

Через некоторые поисковые запросы и проблемы с GitHub я обнаружил, что регулярное выражение должно быть дважды экранировано. Смотрите обновление для исправления ниже. Ссылка на регулярное выражение PR

введите описание изображения здесь

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

Обновлено регулярное выражение ->

введите описание изображения здесь

Никаких результатов ->

введите описание изображения здесь

Я пытался использовать переменные для введения исходного регулярного выражения в строку литерала шаблона, но безрезультатно, так как, по-видимому, вы не можете сделать это с GraphQL. У кого-нибудь была эта проблема или вы хотели поделиться идеей/решением ?

Комментарии:

1. В регулярных выражениях нет ничего особенного, но у вас есть обратные косые черты внутри gql строки шаблона (), которую вам нужно экранировать. Да, использование переменной было бы намного проще, чем указание строкового литерала в строке запроса.

2. @Bergi Я думал, что пиар, который они сделали, — это избежать обратной косой черты. Знаете ли вы, как обойти это без использования переменной, поскольку она не допускает интерполяцию строк

3. Нет, PR, на который вы ссылаетесь, исправил код, который без необходимости удалял экранирование. Код на самом деле просто обрезает / строку и передает ее RegExp конструктору, что new RegExp("\d") эквивалентно /d/ .

4. Что вы подразумеваете под » он не допускает интерполяцию строк «?

5. Кстати, использование regex: ${ JSON.stringify(/d-/d/.toString()) } должно работать