如果我想同时找到"KFC", "EU 8RF"和IK-OTP,代码应该是什么样子?
我的代码是:db.business.find({name:/^[A-Zs?d?-?]*$/}, {name:1}).sort({"name":1})
,但它将返回一个整数的名称,如1973,1999。我应该如何改进我的代码?TIA
使用前瞻来要求至少一个字母。
^(?=.*[A-Z])[A-Zds-]+$
演示可以使用
^(?=[d -]*[A-Z])[A-Zd]+(?:[ -][A-Zd]+)*$
参见regex演示。
细节:
^
-字符串 起始(?=[d -]*[A-Z])
-一个正向前看,要求在当前位置右侧的任何零个或多个数字,空格或连字符之后使用大写ASCII字母[A-Zd]+
-一个或多个大写ASCII字母或数字(?:[ -][A-Zd]+)*
-空格或-
的零次或多次重复,然后是一个或多个大写ASCII字母或数字$
-字符串结束