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

Javascript 在字符串中匹配独占搜索组,javascript,regex,Javascript,Regex,我一直在努力在我的图库中找到一个reg ex补丁 它实现了对字符串进行验证的方法,以根据以下规则确定该字符串是否为简单字符串: 在以下情况下,字符串定义为simple: 这是一个大小写相同的单词,没有空格 它可以包含下划线,甚至可以以下划线开头 它可以包含数字和$,但不能以这些数字开头 这些基本上是确定SQL别名何时需要用双引号括起来的规则 因此,如果我隔离测试逻辑: const m = name.match(/[a-z_][a-z0-9_$]*|[A-Z_][A-Z0-9_$]*/);

我一直在努力在我的图库中找到一个reg ex补丁

它实现了对字符串进行验证的方法,以根据以下规则确定该字符串是否为简单字符串:

在以下情况下,字符串定义为
simple

  • 这是一个大小写相同的单词,没有空格
  • 它可以包含下划线,甚至可以以下划线开头
  • 它可以包含数字和$,但不能以这些数字开头
这些基本上是确定SQL别名何时需要用双引号括起来的规则

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

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

console.log(m && m[0] === name ? 'simple' : 'complex');
它在所有情况下都能通过测试,只有下划线和大写字母除外,比如:
\u A
\u ABC
。同时,它适用于
\u a
\u abc

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


谢谢大家!

如果将元字符
^
(字符串开头)和
$
(字符串结尾)添加到正则表达式中,它也会像预期的那样适用于大写单词,还可以简化输出条件:

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

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

这不起作用的原因是,您将小写替换放在第一位:它将匹配那里的下划线,然后将无法再匹配大写字母,并切换到与第二个替换的新匹配。添加单词边界是一种选择吗<代码>\b(?[A-Z_][A-Z0-9_$]*.[A-Z_][A-Z0-9_$]*.\b是否合法输入?@GalAbra是!以下是我所有的测试:我有超过20个测试被抛出,他们都通过了。太棒了,谢谢你!我就快到了,但我的错误是我把它们按如下方式分组:
/^([a-z_][a-z0-9_$]*)|([a-z_][a-z0-9_$]*)$/
,也就是说,我认为那里需要两个组,但我没有想到要把它们全部组合成一个组:)