从 NSString 中删除 WYSIWYG 编辑器标记

Removing WYSIWYG editor markup from an NSString

我正在从我的 Web 服务(我需要在 UILabel 中设置)返回一个字符串,该字符串具有所见即所得的编辑器标记(不是 HTML) 例如:

[size=3][b]This is an awesome post![/b][/size]

我有一个 NSString 的方法可以去除 HTML,但我不确定如何修改它来搜索这类开始和结束标签。

// How can I modify this?
+ (NSString *)stripHTML:(NSString *)html {

    NSRange r;
    NSString *s = [html copy];
    while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
        s = [s stringByReplacingCharactersInRange:r withString:@""];

    return s;
}

有人可以阐明我可以使用的正则表达式吗?

您可以试试下面的代码:

NSError *error = nil;
NSString *myText = @"[size=3][b]This is an awesome post![/b][/size]";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\[\/?.*?\]" options:NSRegularExpressionDotMatchesLineSeparators error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:myText options:0 range:NSMakeRange(0, [myText length]) withTemplate:@""];
NSLog(@"%@", modifiedString);

只需将其包装到一个单独的方法中即可。

sample program 的输出:

This is an awesome post! 

对于HTML文本,一种解决方案可能不是100%但可能有效:

NSString *strText = @"[size=3][b]This is an awesome post![/b][/size]";
strText = [strText stringByReplacingOccurrencesOfString:@"[" withString:@"<"];
strText = [strText stringByReplacingOccurrencesOfString:@"]" withString:@">"];
NSLog(@"%@",strText);

在 UIWebView 中使用时如下所示: