參考

正規表達式

patternpatternProperties 關鍵字 使用正規表達式來表達約束。所使用的正規表達式語法來自 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 }"

需要協助嗎?

您覺得這些文件有幫助嗎?

幫助我們改進文件!

在 JSON Schema,我們重視文件的貢獻,如同其他類型的貢獻一樣!

仍然需要協助嗎?

學習 JSON Schema 通常令人困惑,但別擔心,我們在這裡提供協助!