我似乎无法使以下正则表达式起作用。当字符串不是以“ 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中不起作用吗?
我似乎无法使以下正则表达式起作用。当字符串不是以“ quick:”开头时,它应该匹配。这个正则表达式字符串来自后端,我也许可以得到...
我不确定字符串中的#和\“是什么目的,但是在我制作的这个操场上,简化正则表达式的工作就很好了: