正则表达式
模式和模式属性关键字使用正则表达式来表示约束。使用的正则表达式语法来自 JavaScript(特别是ECMA 262)。但是,该完整语法并未得到广泛支持,因此建议您坚持使用下面描述的该语法的子集。
单个 unicode 字符(下面的特殊字符除外)与其自身匹配。
.
: 匹配除换行符以外的任何字符。(请注意,换行符的构成在某种程度上取决于您的平台和语言环境,但实际上这很少重要)。^
: 只匹配字符串的开头。$
: 仅在字符串末尾匹配。(...)
: 将一系列正则表达式组合成一个正则表达式。|
: 匹配|
符号之前或之后的正则表达式。[abc]
: 匹配方括号内的任何字符。[a-z]
: 匹配字符范围。[^abc]
: 匹配任何未列出的字符。[^a-z]
: 匹配范围外的任何字符。+
: 匹配前面正则表达式的一个或多个重复项。*
: 匹配前面正则表达式的零次或多次重复。?
: 匹配前面正则表达式的零次或一次重复。+?
,*?
,??
:*
,+
, 和?
限定符都是贪婪的;它们匹配尽可能多的文本。有时不需要这种行为,您希望匹配尽可能少的字符。(?!x)
,(?=x)
:积极或消极地向前查找。exp1(?!exp2):查找后面不是 exp2 的 exp1
exp1(?=exp2):查找后面是 exp2 的 exp1
{x}
: 完全x
匹配前面的正则表达式。{x,y}
: 匹配至少x
和最多y
出现的前面的正则表达式。{x,}
: 匹配x
前面的正则表达式中出现的一个或多个。{x}?
,{x,y}?
,{x,}?
: 上述表达式的懒惰版本。
示例
以下示例匹配一个带有可选区号的简单北美电话号码:
{
"type": "string",
"pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
}
"555-1212" // OK
"(888)555-1212" // OK
"(888)555-1212 ext. 532" // not OK
"(800)FLOWERS" // not OK