參考
正規表達式
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 }"