参考
正则表达式
这 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 }"