Swift Consigue una cuerda entre 2 cuerdas en una cuerda

Estoy obteniendo una cadena de html parse;

string = "javascript:getInfo(1,'Info/99/something', 'City Hall',1, 99);" 

mi código es algo así como

 var startIndex = text.rangeOfString("'") var endIndex = text.rangeOfString("',") var range2 = startIndex2...endIndex substr= string.substringWithRange(range) 

No estoy seguro de si mi segunda secuencia de división debería ser “‘” o “‘,”

quiero mi resultado como

 substr = "Info/99/something" 

Usaría una expresión regular para extraer subcadenas de entradas complejas como esta.

Swift 3.1:

 let test = "javascript:getInfo(1,'Info/99/something', 'City Hall',1, 99);" if let match = test.range(of: "(?<=')[^']+", options: .regularExpression) { print(test.substring(with: match)) } // Prints: Info/99/something 

Swift 2.0:

 let test = "javascript:getInfo(1,'Info/99/something', 'City Hall',1, 99);" if let match = test.rangeOfString("(?<=')[^']+", options: .RegularExpressionSearch) { print(test.substringWithRange(match)) } // Prints: Info/99/something 

Swift 4

 extension String { func slice(from: String, to: String) -> String? { return (range(of: from)?.upperBound).flatMap { substringFrom in (range(of: to, range: substringFrom.. 

Swift 3

 extension String { func slice(from: String, to: String) -> String? { return (range(of: from)?.upperBound).flatMap { substringFrom in (range(of: to, range: substringFrom.. 

Respuesta anterior:

 import Foundation extension String { func sliceFrom(start: String, to: String) -> String? { return (rangeOfString(start)?.endIndex).flatMap { sInd in (rangeOfString(to, range: sInd.. 

Esto funciona si siempre es la segunda división:

 let subString = split(string, isSeparator: "'")[1] 

Puede usar var arr = str.componentsSeparatedByString(",") como su segunda división que le devolverá la matriz

Considere usar una expresión regular para hacer coincidir todo entre comillas simples.

 let string = "javascript:getInfo(1,'Info/99/something', 'City Hall',1, 99);" let pattern = "'(.+?)'" let regex = NSRegularExpression(pattern: pattern, options: nil, error: nil) let results = regex!.matchesInString(string, options: nil, range: NSMakeRange(0, count(string))) as! [NSTextCheckingResult] let nsstring = string as NSString let matches = results.map { result in return nsstring.substringWithRange(result.range)} // First match println(matches[0]) 

Swift 4 versión de @litso. Para encontrar todos los valores en el texto

  func find(inText text: String, pattern: String) -> [String]? { do { let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive) let result = regex.matches(in: text, options: .init(rawValue: 0), range: NSRange(location: 0, length: text.count)) let matches = result.map { result in return (text as NSString).substring(with: result.range) } return matches } catch { print(error) } return nil }