import Foundation
let pattern = ##"""
([ :]) # look for : and space as possible leading characters
([\"]?) # if there's a quote, disregard it
([0-9]{4}) # find the year
- # find the 1st dash
( # Group (4)
(
((0[13578] | (10|12)) # look for 31 day months
- # followed by the 2nd dash
(0[1-9]|[1-2][0-9]|3[0-1]) # and accept days up to 31
)
| # OR...
(02 # look for Feb
- # followed by the 2nd dash
(0[1-9]|[1-2][0-9])) # and accept up to 29 days
| # OR...
((0[469]|11)) # look for 30 day months
- # followed by the 2nd dash
((0[1-9]|[1-2][0-9]|30)) # and accept up to 30 days
)
) # closes (4)
([\"]?)([ \"]?)(\s)
"""##
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .allowCommentsAndWhitespace])
let testString = #"""
This regex changes YYYY-MM-DD to "[[YYYY-MM-DD]]" for Obsidian
WORKS ON:
today: 2025-03-14
birthdays: 1966-06-19
Good Dates: 2022-12-31 and 2025-02-08
old-dates: 1492-01-01 old dates could be an issue, depends on how you use your vault!
no space after colon is ok:2023-07-08
standing alone and quoted is fine: "2021-02-28"
IGNORES:
my template version number has dots for separators (skip): 2025.12.02
No leading whitespace is questionable?2023-06-08
existing links (no leading : or space):
- [[2025-01-01]]
- [2025-01-01](https:123.com)
- "[[2023-11-30]]"
- [["2024-06-05"]]
Not YYYY-MM-DD dates:- 2022-1-1 Euro date: 2022-31-12 or slashes: 2021/09/15
Bad date for month: 2022-02-30 2022-04-31 2022-06-31 2022-11-31 2022-03-32
Don't match serial numbers: 2015-12-3135-89
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let substitutionString = #"$1"[[$3-$4]]"$18"#
let result = regex.stringByReplacingMatches(in: testString, range: stringRange, withTemplate: substitutionString)
print(result)
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 Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression