代码之家  ›  专栏  ›  技术社区  ›  Marco

Swift-在文本视图中识别光标前的单词(带有特殊字符)

  •  6
  • Marco  · 技术社区  · 7 年前

    我有一个扩展名,用于识别并返回光标前的单词:

    extension UITextView {
    
    var currentWord : String? {
    
        let beginning = beginningOfDocument
    
        if let start = position(from: beginning, offset: selectedRange.location),
            let end = position(from: start, offset: selectedRange.length) {
    
            let textRange = tokenizer.rangeEnclosingPosition(end, with: .word, inDirection: 1)
    
            if let textRange = textRange {
                return text(in: textRange)
            }
        }
        return nil
    }
    

    我正在使用UItextGranularity。文字和工程罚款。

    然而,我的问题是:

    如果在单词的开头有一个@,则不会返回。 因此,如果我有@jon,当前单词将是jon。 有没有一种方法可以包含@so,使完整的单词具有特殊字符?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  10
  •   Guy Kogus    7 年前

    看起来你做不到 UITextInputTokenizer . 您可以尝试以下解决方案:

    var currentWord: String? {
        let regex = try! NSRegularExpression(pattern: "\\S+$")
        let textRange = NSRange(location: 0, length: selectedRange.location)
        if let range = regex.firstMatch(in: text, range: textRange)?.range {
            return String(text[Range(range, in: text)!])
        }
        return nil
    }