#include <MsgBoxConstants.au3> ; to declare the Constants of MsgBox
Local $sRegex = "(?mx)([ :]) # look for : and space as possible leading characters" & @CRLF & _
"([\"]?) # if there's a quote, disregard it" & @CRLF & _
"([0-9]{4}) # find the year" & @CRLF & _
"- # find the 1st dash" & @CRLF & _
"( # Group (4)" & @CRLF & _
" (" & @CRLF & _
" ((0[13578] | (10|12)) # look for 31 day months" & @CRLF & _
" - # followed by the 2nd dash" & @CRLF & _
" (0[1-9]|[1-2][0-9]|3[0-1]) # and accept days up to 31" & @CRLF & _
" ) " & @CRLF & _
" | # OR... " & @CRLF & _
" (02 # look for Feb" & @CRLF & _
" - # followed by the 2nd dash" & @CRLF & _
" (0[1-9]|[1-2][0-9])) # and accept up to 29 days" & @CRLF & _
" | # OR..." & @CRLF & _
" ((0[469]|11)) # look for 30 day months" & @CRLF & _
" - # followed by the 2nd dash" & @CRLF & _
" ((0[1-9]|[1-2][0-9]|30)) # and accept up to 30 days" & @CRLF & _
" )" & @CRLF & _
") # closes (4)" & @CRLF & _
"([\"]?)([ \"]?)(\s)"
Local $sString = "This regex changes YYYY-MM-DD to "[[YYYY-MM-DD]]" for Obsidian" & @CRLF & _
"WORKS ON:" & @CRLF & _
"today: 2025-03-14" & @CRLF & _
"birthdays: 1966-06-19" & @CRLF & _
"Good Dates: 2022-12-31 and 2025-02-08" & @CRLF & _
"old-dates: 1492-01-01 old dates could be an issue, depends on how you use your vault!" & @CRLF & _
"no space after colon is ok:2023-07-08" & @CRLF & _
"standing alone and quoted is fine: "2021-02-28"" & @CRLF & _
"IGNORES:" & @CRLF & _
"my template version number has dots for separators (skip): 2025.12.02" & @CRLF & _
"No leading whitespace is questionable?2023-06-08" & @CRLF & _
"existing links (no leading : or space):" & @CRLF & _
" - [[2025-01-01]]" & @CRLF & _
"- [2025-01-01](https:123.com)" & @CRLF & _
" - "[[2023-11-30]]"" & @CRLF & _
" - [["2024-06-05"]]" & @CRLF & _
"Not YYYY-MM-DD dates:- 2022-1-1 Euro date: 2022-31-12 or slashes: 2021/09/15" & @CRLF & _
"Bad date for month: 2022-02-30 2022-04-31 2022-06-31 2022-11-31 2022-03-32" & @CRLF & _
"Don't match serial numbers: 2015-12-3135-89" & @CRLF & _
""
Local $sSubst = "$1"[[$3-$4]]"$18"
Local $sResult = StringRegExpReplace($sString, $sRegex, $sSubst)
MsgBox($MB_SYSTEMMODAL, "Result", $sResult)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm