无法在 Swift 中获取正则表达式以匹配 "not containing"

Cannot get Regex in Swift to match "not containing"

我似乎无法使用以下正则表达式。当字符串不以 "quick:" 开头时,它应该匹配。这个正则表达式字符串来自后端,我也许可以更改它,但我无法将其更改为代码中的前缀测试,因为可以使用任何正则表达式。

我尝试使用 .range( of):

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

这也失败了。我将正则表达式插入到在线正则表达式检查器中,以确保它确实有效。 谁能阐明为什么这在 Swift 中不起作用?

我不确定字符串中 # 和 \" 的用途是什么,但简化正则表达式在我制作的这个游乐场中工作得很好:

import UIKit
var str = "Hello, playground"
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
    }
}

let shouldBeTrue = try "No".match("^(?!quick:)")
let shouldBeFalse = try "quick:No".match("^(?!quick:)")