参考
正则表达式
这 pattern 和 patternProperties 关键词 使用正则表达式来表达约束。使用的正则表达式语法来自 JavaScript (ECMA 262,具体来说)。但是,该完整语法并没有得到广泛支持,因此建议你使用下面描述的语法子集。
- 单个 Unicode 字符(除了以下特殊字符)匹配自身。
.: 匹配除换行符外的任何字符。(请注意,换行符的构成在某种程度上取决于你的平台和语言环境,但在实践中,这很少重要)。若要包含换行符,请使用(.|\r?\n)*模式,该模式避免了使用正则表达式标志/修饰符,并且在各种正则表达式库中都有良好的支持。^: 仅匹配字符串开头。$: 仅匹配字符串结尾。(...): 将一系列正则表达式分组为单个正则表达式。|: 匹配|符号之前或之后的正则表达式。[abc]: 匹配方括号内的任何字符。[a-z]: 匹配字符范围。[^abc]: 匹配任何未列出的字符。[^a-z]: 匹配范围之外的任何字符。+: 匹配前面正则表达式的一次或多次重复。*: 匹配前面正则表达式的零次或多次重复。?: 匹配前面正则表达式的零次或一次重复。+?,*?,??:*,+和?限定符都是贪婪的;它们尽可能多地匹配文本。有时这种行为并不可取,你希望尽可能少地匹配字符。(?!x),(?=x): 负向先行断言和正向先行断言。{x}: 匹配前面正则表达式恰好x次。{x,y}: 匹配前面正则表达式至少x次,至多y次。{x,}: 匹配前面正则表达式至少x次。{x,y}?,{x,}?: 以上表达式的非贪婪版本。- 仅使用标准转义符,例如
\n、\r、\t,并记住您还需要进行 JSON 转义。
示例
以下示例匹配一个简单的北美电话号码,带有一个可选的区号
{ "type": "string", "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"}
数据
"555-1212"
数据
"(888)555-1212"
数据
"(888)555-1212 ext. 532"
数据
"(800)FLOWERS"
以下示例检查字符串是否以{{开头,并以}}结尾,并且还允许多行字符串。
数据
{ "type": "string", "pattern": "^\\{\\{(.|[\\r\\n])*\\}\\}$", }
数据
"{{ foo\nbar }}"
数据
"{ foo }"