将变量传递给正则表达式在Gatsby graphql查询中

时间:2017-10-25 13:03:54

标签: javascript regex graphql gatsby

我有以下查询接收变量private class ProcessImageLocally extends AsyncTask<ImageItem, Void, ImageItem>{ //+++++++++++++++++++++++++++++++++++++++ public AsyncReponseForImageItem response = null; @Override protected void onPreExecute() { localProcessBegin(); //Process data locally } @Override protected ImageItem doInBackground(ImageItem... params) { //**************processing locally***************** try { Bitmap bm = BitmapFactory.decodeFile(params[0].getBitmapPath()); Bitmap croppedBitmap = getBitmap(getApplicationContext(), INPUT_SIZE, bm); final List<Classifier.Recognition> results = classifier.recognizeImage(croppedBitmap); String resultStr = results.toString(); String trimResult = resultStr.substring(resultStr.indexOf("[")+1,resultStr.indexOf("]")).trim(); String localId = params[0].getId(); trimResult = trimResult.substring(0,trimResult.indexOf(")")) + " likely)"; Bitmap thumbnail = getBitmap(getApplicationContext(), 50, bm); ImageItem tmp = new ImageItem(localId, imgToString(thumbnail), trimResult); return tmp; //Skip to the outside return } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(ImageItem imageItem) { response.asyncFinish(imageItem); } } 。目前,我正在根据其$tag的值过滤结果。 frontmatter.keywords是逗号分隔的字符串,因此我需要使用正则表达式来检查其中是否包含keywords,但是我无法确定如何将变量传递到正则表达式。如果我将值硬编码到正则表达式中(如下面的代码,我有硬编码$tag,则过滤有效。如果我将/example/替换为example,我会收到错误:

  

GraphQLError:Variable&#34; $ tag&#34;从未在操作中使用&#34; TagQuery&#34;。

$tag

我应该如何在正则表达式中使用export const pageQuery = graphql` query TagQuery($tag: String) { allMarkdownRemark( limit: 100 sort: { fields: [frontmatter___date], order: DESC } filter: { frontmatter: { keywords: { regex: "/example/" } } } ) { totalCount edges { node { fields { slug } excerpt frontmatter { title keywords date } } } } } `;

我实际上更喜欢采用不同的方法并将标记添加为$tag中的数组,但似乎没有任何基于数组值的过滤方法

2 个答案:

答案 0 :(得分:3)

我最终将标签拆分为数组,然后使用以下内容进行过滤:

filter: { fields: { tags: { in: [$tag] } } }

答案 1 :(得分:0)

无论您传递的是$ tag,只需将其转换为

const $tag = "\/".concat(tag).concat("\/")

但是您的错误专门指向您的查询根本没有使用变量的事实。所以您还需要做

filter: { frontmatter: { keywords: { regex: $tag } } }