Я не могу заставить работать следующее регулярное выражение. Должно совпадать, когда строка не начинается с «quick:». Эта строка регулярного выражения происходит из бэкэнда, возможно, я смогу ее изменить, но я не могу изменить ее на префиксный тест в коде, так как можно использовать любое регулярное выражение.
Я пытался использовать .range ( из):
extension String {
func regexMatch(_ pattern: String) -> Bool {
return self.range(of: pattern, options: .regularExpression) != nil
}
}
XCTAssertTrue("No".regexMatch(#"/^(?!quick:)/"#) ) // Fails
XCTAssertFalse("quick:No".regexMatch(#"/^(?!quick:)/"#)) // Passes
Но первый тест не пройден. Поэтому я попытался NSRegularExpression
extension String {
// https://gist.github.com/torinkwok/799784dc28fd85e4751b935696030a1d
func match(_ pattern: String, options: NSRegularExpression.Options = []) throws -> Bool {
let regex = try NSRegularExpression(pattern: pattern, options: options)
return regex.numberOfMatches(in: self,
options: [],
range: NSRange(location: 0, length: 0.distance(to: utf16.count))) != 0
}
}
XCTAssertTrue(try "No".match(#"/^(?!quick:)/"#) ) // Fails
XCTAssertFalse(try "quick:No".match(#"/^(?!quick:)/"#)) // Passes
И это также не удается. Я подключил Regex к онлайн-контролеру, чтобы убедиться, что он работает и работает. Кто-нибудь может пролить свет на то, почему это не работает в Swift?