【发布时间】:2021-12-25 10:04:42
【问题描述】:
我正在尝试编写一个正则表达式,以重构 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]
}
【问题讨论】:
标签: regex typescript graphql