import Foundation
let pattern = #"^function (\w+)\("#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
function Date(Y, M, D, h, m, s, ms) { // 1397
var length = arguments.length; // 1398
var date; // 1399
if (this instanceof NativeDate) { // 1400
var seconds = s; // 1401
var millis = ms; // 1402
if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) { // 1403
// work around a Safari 8/9 bug where it treats the seconds as signed // 1404
var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit; // 1405
var sToShift = Math.floor(msToShift / 1e3); // 1406
seconds += sToShift; // 1407
millis -= sToShift * 1e3; // 1408
} // 1409
date = length === 1 && $String(Y) === Y ? // isString(Y) // 1410
// We explicitly pass it through parse: // 1411
new NativeDate(DateShim.parse(Y)) : // 1412
// We have to manually make calls depending on argument // 1413
// length here // 1414
length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) : // 1415
length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) : // 1416
length >= 5 ? new NativeDate(Y, M, D, h, m) : // 1417
length >= 4 ? new NativeDate(Y, M, D, h) : // 1418
length >= 3 ? new NativeDate(Y, M, D) : // 1419
length >= 2 ? new NativeDate(Y, M) : // 1420
length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y) : // 1421
new NativeDate(); // 1422
} else { // 1423
date = NativeDate.apply(this, arguments); // 1424
} // 1425
if (!isPrimitive(date)) { // 1426
// Prevent mixups with unfixed Date object // 1427
defineProperties(date, { constructor: DateShim }, true); // 1428
} // 1429
return date; // 1430
}
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
if let firstMatch = regex.firstMatch(in: testString, range: stringRange) {
let result: [String] = (1 ..< firstMatch.numberOfRanges).map { (testString as NSString).substring(with: firstMatch.range(at: $0)) }
print(result)
} else {
print("No matches were found.")
}
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