我正在寻找与 uuid 之前和之后的特定字符串的模式匹配。
例如
user/a24a6ea4-ce75-4665-a070-57453082c256/photo/a24a6ea4-ce75-4665-a070-57453082c256
const regexExp = new RegExp(/^user\/[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i);
console.log(regexExp.test("user/a24a6ea4-ce75-4665-a070-57453082c256")); // true
console.log(regexExp.test("user/a24a6ea4-ce75-4665-a070-57453082c256/photo")); // false
我期望的是匹配
user/{uuid}/*
如何在uuid后面使用通配符?
如果您想匹配两者,则可以省略使用 RegExp 构造函数,因为您已经在使用文字,并且可以选择匹配
/
后跟字符串的其余部分。
[4]
可以只是 4
const regexExp = /^user\/[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}(?:\/.*)?$/i;
参见 regex101 演示。
const regexExp = /^user\/[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}(?:\/.*)?$/i;
[
"user/a24a6ea4-ce75-4665-a070-57453082c256",
"user/a24a6ea4-ce75-4665-a070-57453082c256/photo",
"user/a24a6ea4-ce75-4665-a070-57453082c256asdasd"
].forEach(s =>
console.log(`${s} --> ${regexExp.test(s)}`)
);
流行的 uuidjs/uuid 项目提供了
uuid.validate()
函数,该函数使用 以下 REGEX 进行 UUID 验证
/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
我建议使用此正则表达式作为您的解决方案的基础。
添加
user/$UUID/*
的自定义要求并删除 00000000-0000-0000-0000-000000000000
后,您将得到以下内容:
/^user\/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})(?:\/.*)?$/i
参见 regex101 演示。
const regexExp = /^user\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}(?:\/.*)?$/i;
[
"user/a24a6ea4-ce75-4665-a070-57453082c256",
"user/a24a6ea4-ce75-4665-a070-57453082c256/photo",
"user/a24a6ea4-ce75-4665-a070-57453082c256/",
"user/00000000-0000-0000-0000-000000000000",
"user/a24a6ea4-ce75-4665-a070-57453082c256asdasd",
].forEach(s =>
console.log(`${s} --> ${regexExp.test(s)}`)
);