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

时间:2018-01-20 19:54:07

标签: javascript regex

我一直在努力在我的pg-promise图书馆中提出注册解决方案......

它实现了a formatting method,根据以下规则对字符串进行验证,以确定它是否为simple字符串:

在以下情况下,字符串被定义为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 个答案:

答案 0 :(得分:1)

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

const m = name.match(/^([a-z_][a-z0-9_$]*|[A-Z_][A-Z0-9_$]*)$/);

console.log(m ? 'simple' : 'complex');