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

Posted

技术标签:

【中文标题】从目标 C 中的 WKwebview 中删除 <div><br>【英文标题】:Remove <div><br> from WKwebview in objective C 【发布时间】:2019-09-23 14:54:48 【问题描述】:

我有字符串:

<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 则只有它会被删除。

【问题讨论】:

您在哪里遇到问题?有代码可以分享吗?这将是一个定制的洗涤器,用于获取您期望的字符串。 我从服务器端获取它。这是用户格式化的方式。我只是想从语句的开头和结尾删除 Div 和 BR 标签,而不是介于两者之间 【参考方案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);

这将为您提供第一个实例并替换它。你会想要找到正确的范围并在你认为合适的时候替换它们。您还需要知道它们在范围内的位置,以便知道您正在替换正确的。

【讨论】:

感谢您的回复。我如何在目标 C 中做到这一点?它会从字符串的开头和结尾删除 div 和 br 吗? NSString searchedString = "HTML 字符串"; NSRange searchedRange = NSMakeRange(0, [searchedString length]); NSString *pattern = @"<.>?>"; NSError 错误=零; NSRegularExpression regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; NSString *parsedString = [regex stringByReplacingMatchesInString:searchedString options:0 range:searchedRange withTemplate:@""]; NSLog(@"parsedString: %@", parsedString);它正在删除所有标签。因此也删除了 html 格式 我只想从开头和结尾删除 和 。不在两者之间。我也不想删除在 HTML 中完成的格式。 @iosdeveloper 抱歉,我添加了 Swift,但感谢您翻译它。我也编辑了我的回复,更详细一点。

以上是关于从目标 C 中的 WKwebview 中删除 <div><br>的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 4中从WKWebView中的网页中删除DIV标签?

如何在 WKWebView 目标 c 中对齐图像中心

从 WKWebview 中删除/剥离 HTML 类

如何从目标 c 中的单词 \"hello\" 中删除 \?

从字符串中删除格式:目标 c 中的“(123) 456-7890” => “1234567890”

将标签移动到目标c中的矩形后如何从标签中删除触摸动作