首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用反斜杠在knex raw

使用反斜杠在knex raw
EN

Stack Overflow用户
提问于 2021-04-05 11:38:14
回答 2查看 295关注 0票数 0

我有一个示例代码,它使用knex raw:

代码语言:javascript
运行
复制
let reg = '\((.*?\)'
const result = await knex.raw(`select *, regexp(code, '${reg}', 1,1,null,1) from test ...`);

和knex查询生成查询。

代码语言:javascript
运行
复制
select *, regexp(code, '((.*?)', 1,1,null,1) from test ...

-> 缺少反斜杠

当我将reg变量改为let reg = '\\((.*?\\)'

knex查询生成:

代码语言:javascript
运行
复制
select *, regexp(code, '\\((.*?\\)', 1,1,null,1) from test ...

->双反斜杠

我想要我的knex查询生成查询单反斜杠:

代码语言:javascript
运行
复制
select *, regexp(code, '\((.*?\)', 1,1,null,1) from test ...

请救救我!

EN

回答 2

Stack Overflow用户

发布于 2021-04-07 17:55:45

你所要求的毫无意义。引用MySQL手册

若要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。MySQL解析器解释其中一个反斜杠,正则表达式库解释另一个反斜杠。例如,要匹配包含特殊+字符的字符串1+2,只有以下正则表达式中的最后一个是正确的: mysql>选择REGEXP_LIKE('1+2',‘1+2’),-> 0 mysql>选择REGEXP_LIKE('1+2',‘1+2’),-> 0 mysql>选择REGEXP_LIKE('1+2','1\+2');

所以,双反斜杠是正确的输出,单反斜杠根本不会做任何事情。

但是,您甚至不应该从插入到查询中的带有双反斜杠的字符串文本(而不是使用?占位符)获得这个输出,所以我假设您误读了输出,它可能是对象的一部分,或者已经被重新编码为JS字符串文本。要获得双反斜杠的正确输出,您需要在字符串文本中使用四重反斜杠,或者使用参数化查询。

此外,您的regexp有不平衡的副项(一个未转义的开括号,但没有结束括号)。

票数 0
EN

Stack Overflow用户

发布于 2021-04-07 17:43:59

尝尝这个

代码语言:javascript
运行
复制
let reg = '\\((.*?\\)'
const result = await knex.raw(`select *, regexp(code, '?', 1,1,null,1) from test ...`, [reg]);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66952400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档