跳到主要内容

正则表达式

模式模式属性关键字使用正则表达式来表示约束。使用的正则表达式语法来自 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