我一直在努力在我的 pg-promise 中找到一个 reg-ex 修复程序。图书馆...
它实现了 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
。
如何更改正则表达式以使其也适用于这些特殊情况?
谢谢!
最佳答案
如果您将元字符 ^
(字符串开头)和 $
(字符串结尾)添加到正则表达式中,则它对于大写单词也将按预期工作,并简化输出条件:
const m = name.match(/^([a-z_][a-z0-9_$]*|[A-Z_][A-Z0-9_$]*)$/);
console.log(m ? 'simple' : 'complex');
关于javascript - 匹配字符串中的独占搜索组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360463/