You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求匹配PostgreSQL运算符名的JavaScript正则表达式

PostgreSQL运算符名匹配正则(适配moo库)

直接给出可在moo中使用的正则表达式(两种形式,按需选择):

正则表达式字面量

/^(?=.{1,63}$)(?!.*(--|\/\*))(?:[-+*\/<>=~!@#%^&|`?]|(?=.*[!@#%^&|`?])[-+*\/<>=~!@#%^&|`?]{2,63}(?<=[+-])|[-+*\/<>=~!@#%^&|`?]{2,63}(?<![+-]))$/

字符串形式(适合moo的规则定义)

"^(?=.{1,63}$)(?!.*(--|\\/\\*))(?:[-+*\\/<>=~!@#%^&|`?]|(?=.*[!@#%^&|`?])[-+*\\/<>=~!@#%^&|`?]{2,63}(?<=[+-])|[-+*\\/<>=~!@#%^&|`?]{2,63}(?<![+-]))$"

规则拆解

每个部分对应你的需求:

  • ^(?=.{1,63}$):强制匹配的字符串长度在1到63字符之间,符合PostgreSQL的标识符长度限制
  • (?!.*(--|\/\*)):负向预查,确保字符串中不包含--或/*这两个注释起始序列
  • 非捕获组(?:...)包含三种合法情况:
    1. [-+*\/<>=~!@#%^&|?]`:匹配单字符运算符,允许所有指定的特殊字符
    2. (?=.*[!@#%^&|?])[-+*/<>=~!@#%^&|`?]{2,63}(?<=[+-])`:匹配多字符且以`+`/`-`结尾的运算符,通过正向预查确保字符串中至少包含`!@#%^&|`?`中的一个字符
    3. [-+*\/<>=~!@#%^&|?]{2,63}(?<![+-]):匹配多字符且**不以**+/-结尾的运算符,通过反向后顾排除结尾为+或-`的情况

moo库使用示例

比如定义一个operator词法规则:

const moo = require('moo');

const lexer = moo.compile({
  operator: /^(?=.{1,63}$)(?!.*(--|\/\*))(?:[-+*\/<>=~!@#%^&|`?]|(?=.*[!@#%^&|`?])[-+*\/<>=~!@#%^&|`?]{2,63}(?<=[+-])|[-+*\/<>=~!@#%^&|`?]{2,63}(?<![+-]))$/,
  // 其他规则...
});

测试验证

  • 合法案例:!、@-、<>、!+、%&|
  • 非法案例:--(包含注释序列)、/*(包含注释序列)、+-(多字符以-结尾且无指定特殊字符)、++++(多字符以+结尾且无指定特殊字符)、abc(含非允许字符)

内容的提问来源于stack exchange,提问作者Tim Needham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:50:03