代码之家  ›  专栏  ›  技术社区  ›  vitaly-t

在字符串中匹配独占搜索组

  •  0
  • vitaly-t  · 技术社区  · 8 年前

    我一直在努力在我的 pg-promise 图书馆

    它实现 a formatting method 它对字符串进行验证以确定其是否为 simple 一个或多个,基于以下规则:

    字符串定义为 易于理解的 什么时候:

    • 它是一个大小写单一单词,没有空格
    • 它可以包含下划线,甚至可以以下划线开头
    • 它可以包含数字和$,但不能以数字和$开头

    这些基本上是确定何时需要将SQL别名用双引号括起来的规则。

    因此,如果我隔离测试逻辑:

    const m = name.match(/[a-z_][a-z0-9_$]*|[A-Z_][A-Z0-9_$]*/);
    
    console.log(m && m[0] === name ? 'simple' : 'complex');
    

    它在所有情况下都能通过测试,除非我们有下划线,然后是大写字母,如下所示: _A 或 __ABC . 同时,它适用于 _a 和 __abc .

    如何更改正则表达式以使其也适用于那些特殊情况?

    非常感谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Kos Tamilselvan Sellamuthu    8 年前

    如果添加元字符 ^ (字符串的开头)和 $ (字符串末尾)对于正则表达式,它也将按预期对大写词起作用,并且还可以简化输出条件:

    const m = name.match(/^([a-z_][a-z0-9_$]*|[A-Z_][A-Z0-9_$]*)$/);
    
    console.log(m ? 'simple' : 'complex');