从目标C的WKwebview中删除<div> <br>

时间:2019-09-23 14:54:48

标签: javascript html ios wkwebview

我有一个字符串:

<div><br/><div><br/><div style="box-sizing: border-box; font-family: 'Segoe UI', 'Helvetica Neue', 'Apple Color Emoji', 'Segoe UI Emoji', Helvetica, Arial, sans-serif; font-size: 14px;"><br/><div data-tid="messageBodyContainer"><br/><div data-tid="messageBodyContent"><br/><div>Thanks for agreeing to participate in our online bulletin board </div><br/><div><br/></div><br/><div><br/></div><br/></div><br/></div><br/></div><br/></div><br/></div>

它由许多和
组成。 该字符串来自服务器,因此并非总是固定的。 我需要编写一些动态逻辑,如果它包含多个div和br,那么只有它会被删除。

1 个答案:

答案 0 :(得分:1)

如果您将html作为字符串获取,则可以使用正则表达式进行解析

// Original string
let htmlString = "<div><br/><div><br/><div style=\"box-sizing: border-box; font-family: 'Segoe UI', 'Helvetica Neue', 'Apple Color Emoji', 'Segoe UI Emoji', Helvetica, Arial, sans-serif; font-size: 14px;\"><br/><div data-tid=\"messageBodyContainer\"><br/><div data-tid=\"messageBodyContent\"><br/><div>Thanks for agreeing to participate in our online bulletin board </div><br/><div><br/></div><br/><div><br/></div><br/></div><br/></div><br/></div><br/></div><br/></div>"

do {
    // Let regex tell handle the html matching
    let regex = try NSRegularExpression(pattern: "<.*?>", options: NSRegularExpression.Options.caseInsensitive)

    // Get the range for the html string
    let range = NSMakeRange(0, htmlString.count)

    // Replace the regex matches with an empty string
    let parsedString = regex.stringByReplacingMatches(in: htmlString, options: NSRegularExpression.MatchingOptions(), range: range, withTemplate: "")
    print("PARSED HTML STRING:\n  \(parsedString)")    

} catch(let error) {
    print("Error: \(error.localizedDescription)")
}

由于您无法控制服务器端的响应,因此使用SwiftSoup库可能会有所帮助。这是html的一个很好的本机界面。

编辑:

耦合问题:对不起,我错过了问题的Objective-C部分。感谢您使用Swift并运行它。其次,如果您不只是想要带有html标签的字符串(我误解了原始问题),那么最好的选择是使用stringByReplacingCharactersInRange。这是删除第一个div和br标签的示例。

NSString *removeFirstPass = @"<div><br/>";
NSRange firstPassRange = [htmlString rangeOfString:removeFirstPass];

if (NSNotFound != firstPassRange.location) {
    htmlString = [htmlString stringByReplacingCharactersInRange:firstPassRange withString:@""];
}
NSLog(@"Parsed String: %@", htmlString);

这将为您提供第一个实例并替换它。您将希望找到合适的范围并根据需要替换它们。您还需要知道它们在范围内的哪个位置,以便您知道要替换正确的对象。