捕获第一个左大括号和第二个左括号之间的 graphql 数据键
Capturing graphql data key between the first opening curly bracket and the second opening parenthesis
我正在尝试编写正则表达式以重构 GraphQL 上的一些端到端测试 API。
以下是我想要捕获的一些示例:
query SignIn($payload: AuthCredentialsInput!) {
signIn(payload: $payload) {
token
}
}
应该检索 signIn
mutation SendConfirmationEmail($athleteId: ID!) {
sendConfirmationEmail(athleteId: $athleteId) {
id
}
}
应该检索 sendConfirmationEmail
mutation CreateProgram($title: String!) {
createProgram(title: $title) {
id
title
}
}
应该检索 createProgram
query GetAllExerciseTemplates {
getAllExerciseTemplates {
id
title
}
}
应该检索 getAllExerciseTemplates
目前我需要为每个端到端测试手动传递这些密钥。
我最好的尝试是这个正则表达式:.+?\{+[ \r\n\t\f\v ](.+)\(
const regexTest = query.query.match(/.+?\{+[ \r\n\t\f\v ](.+)\(/)
console.warn(regexTest)
但结果是这样的:
console.warn
[
'mutation CreateProgram($title: String!) {\n createProgram(',
' createProgram',
index: 0,
input: 'mutation CreateProgram($title: String!) {\n' +
' createProgram(title: $title) {\n' +
' id\n' +
' title\n' +
' }\n' +
' }',
groups: undefined
]
这里有可以解决的正则表达式专家吗?
编辑:这是我做的最好的一张照片,但如果我能只有一个正则表达式而不是两个就更好了
function getDataKey(query: Query) {
const keyBeforeFirstParenthesis = /.+?{[\r\n\t\f\v ]+(.+)\(/
const keyBeforeFirstBracket = /.+?{[\r\n\t\f\v ]+(.+) {/
let regExpMatchArray
regExpMatchArray = query.query.match(keyBeforeFirstParenthesis)
if (!regExpMatchArray)
regExpMatchArray = query.query.match(keyBeforeFirstBracket)
return regExpMatchArray[1]
}
您可以将两个正则表达式加入
/.+?{\s*(.+?)\s*[({]/
见regex demo。 详情:
.+?
- 除换行字符外的一个或多个字符尽可能少
{
- 一个 {
字符
\s*
- 零个或多个空格
(.+?)
- 第 1 组:除换行字符外的一个或多个字符尽可能少
\s*
- 零个或多个空格
[({]
- (
或 {
字符。
我正在尝试编写正则表达式以重构 GraphQL 上的一些端到端测试 API。
以下是我想要捕获的一些示例:
query SignIn($payload: AuthCredentialsInput!) {
signIn(payload: $payload) {
token
}
}
应该检索 signIn
mutation SendConfirmationEmail($athleteId: ID!) {
sendConfirmationEmail(athleteId: $athleteId) {
id
}
}
应该检索 sendConfirmationEmail
mutation CreateProgram($title: String!) {
createProgram(title: $title) {
id
title
}
}
应该检索 createProgram
query GetAllExerciseTemplates {
getAllExerciseTemplates {
id
title
}
}
应该检索 getAllExerciseTemplates
目前我需要为每个端到端测试手动传递这些密钥。
我最好的尝试是这个正则表达式:.+?\{+[ \r\n\t\f\v ](.+)\(
const regexTest = query.query.match(/.+?\{+[ \r\n\t\f\v ](.+)\(/)
console.warn(regexTest)
但结果是这样的:
console.warn
[
'mutation CreateProgram($title: String!) {\n createProgram(',
' createProgram',
index: 0,
input: 'mutation CreateProgram($title: String!) {\n' +
' createProgram(title: $title) {\n' +
' id\n' +
' title\n' +
' }\n' +
' }',
groups: undefined
]
这里有可以解决的正则表达式专家吗?
编辑:这是我做的最好的一张照片,但如果我能只有一个正则表达式而不是两个就更好了
function getDataKey(query: Query) {
const keyBeforeFirstParenthesis = /.+?{[\r\n\t\f\v ]+(.+)\(/
const keyBeforeFirstBracket = /.+?{[\r\n\t\f\v ]+(.+) {/
let regExpMatchArray
regExpMatchArray = query.query.match(keyBeforeFirstParenthesis)
if (!regExpMatchArray)
regExpMatchArray = query.query.match(keyBeforeFirstBracket)
return regExpMatchArray[1]
}
您可以将两个正则表达式加入
/.+?{\s*(.+?)\s*[({]/
见regex demo。 详情:
.+?
- 除换行字符外的一个或多个字符尽可能少{
- 一个{
字符\s*
- 零个或多个空格(.+?)
- 第 1 组:除换行字符外的一个或多个字符尽可能少\s*
- 零个或多个空格[({]
-(
或{
字符。