3

I wrote extension that create split method:

extension String {
    func split(splitter: String) -> Array<String> {
        return self.componentsSeparatedByString(splitter)
    }
}

So in playground I can write:

var str = "Hello, playground"

if str.split(",").count > 1{
    var out = str.split(",")[0]

    println("output: \(out)") // output: Hello
}

What do I need to make it work with regex like in Java:

str.split("[ ]+")

Because this way it doesn't work.

Thanks,

1
  • I'd start with this method here: news.ycombinator.com/item?id=7890148. Run that, break off the string until the start of the found range and keep doing it until it returns NSNotFound. Commented Aug 13, 2014 at 21:05

1 Answer 1

10

First, your split function has some redundancy. It is enough to return

return self.componentsSeparatedByString(splitter)

Second, to work with a regular expression you just have to create a NSRegularExpression and then perhaps replace all occurrences with your own "stop string" and finally separate using that. E.g.

extension String {
    func split(regex pattern: String) -> [String] {
        let template = "-|*~~*~~*|-" /// Any string that isn't contained in the original string (self).

        let regex = try? NSRegularExpression(pattern: pattern)
        let modifiedString = regex?.stringByReplacingMatches(
            in: self,
            range: NSRange(
                location: 0,
                length: count
            ),
            withTemplate: template /// Replace with the template/stop string.
        )
        
        /// Split by the replaced string.
        return modifiedString?.components(separatedBy: template) ?? []
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

Perhaps better to put the Swift 5 version below or as a separate answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.