In other posts他们解释了如何通过正则表达式匹配MongoDB对象ID。我看起来正好相反:给定一个字符串,如果不是有效的mongo对象id,则返回正数的正则表达式。换句话说,我希望匹配不是mongodb对象id的所有内容。
我认为它应该像正则表达式一样容易否定(?!),但我无法做到正确。
正则表达式应该在Javascript和Python3中工作(它可能是两个不同的正则表达式)。如果需要,我可以接受一点精度损失,字符串可以有空格但不能换行。
例如,全名(James Bond
)应匹配正数,但不匹配(45cbc4a0e4123f6920000002
)
谢谢: - )
答案 0 :(得分:0)
可能是这样:
const isNotMongoObject = id => !/^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)/i.test(id)
const testIds = [" James Bond ", "45cbc4a0e4123f6920000002", "112345679065574883030833", "FFFFFFFFFFFFFFFFFFFFFFFF", "45cbc4a0e4123f6920000002", ` James
Bond `]
for (const id of testIds) {
console.log(`${id} ${isNotMongoObject(id)}`)
}

def isNotMongoObject id:
return re.match(r"^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)", id) is not None
答案 1 :(得分:0)
在正则表达式语言中,相反的是:
^(?!(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)).+
产生以下结果:
112345679065574883030833 => true
FFFFFFFFFFFFFFFFFFFFFFFF => true
45cbc4a0e4123f6920000002 => false (ie a mongo id)
112345679065574883030833 => true
James Bond => true
请参阅a demo on regex101.com 另一个(更好的?)方法是证明是一个Mongo ID,然后以编程方式检查否定。