【问题标题】:Capturing graphql data key between the first opening curly bracket and the second opening parenthesis在第一个左大括号和第二个左括号之间捕获graphql数据键
【发布时间】: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


    【解决方案1】:

    您可以将两个正则表达式加入

    /.+?{\s*(.+?)\s*[({]/
    

    请参阅regex demo详情

    • .+? - 除了换行符之外,一个或多个字符尽可能少
    • { - 一个 { 字符
    • \s* - 零个或多个空格
    • (.+?) - 第 1 组:除换行符之外的一个或多个字符尽可能少
    • \s* - 零个或多个空格
    • [({] - ({ 字符。

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2021-10-22
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      相关资源
      最近更新 更多