`
jsntghf
  • 浏览: 2533434 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

解析markdown中的图片地址

    博客分类:
  • iOS
阅读更多

1、RegularParser.h

#import <Foundation/Foundation.h>

@interface RegularParser : NSObject

+ (NSArray *)imageUrlsInString:(NSString *)string trimedString:(NSString **)trimedString;

@end

 

2、RegularParser.m

#import "RegularParser.h"

static NSString *imageRegular = @"!\\[.*?\\]\()\\(.*?\\)";

@implementation RegularParser

+ (NSArray *)imageUrlsInString:(NSString *)string trimedString:(NSString **)trimedString {
    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:imageRegular
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    __block NSMutableArray *imagesArray = [NSMutableArray array];
    __block NSMutableString *mutableString = [string mutableCopy];
    __block NSInteger offset = 0;
    __block NSString *keyword = nil;
    __block NSString *imageUrl = nil;
    [regex enumerateMatchesInString:string
                            options:0
                              range:NSMakeRange(0, string.length)
                         usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                             NSRange resultRange = [result range];
                             resultRange.location += offset;
                             // image
                             keyword = [regex replacementStringForResult:result
                                                                inString:mutableString
                                                                  offset:offset
                                                                template:@"$0"];
                             NSRange startRange = [keyword rangeOfString:@"]("];
                             if (startRange.length > 0) {
                                 NSRange range = NSMakeRange(startRange.location + startRange.length,
                                                             keyword.length - (startRange.location + startRange.length + 1));
                                 imageUrl = [keyword substringWithRange:range];
                                 [imagesArray addObject:imageUrl];
                             }
                             
                             [mutableString replaceCharactersInRange:resultRange withString:@""];
                             offset -= resultRange.length;
                             
                             *trimedString = mutableString;
                         }];
    return imagesArray;
}

@end

 

3、示例

NSString *markdownString = @"![](http://dl2.iteye.com/upload/attachment/0105/4183/f2b93502-e02b-3259-9837-d3dd14151e9d.png) When I say Japanese-Chinese food I'm not referring to some new type of restaurant serving both Japanese and Chinese food. This means the restaurant serves Chinese food prepared for Japanese tastes. ![](http://dl2.iteye.com/upload/attachment/0103/6545/d0590cfe-bd18-3c25-8b1b-2190c0526b5c.png) This is **subuta** -- sweet and sour pork, this one photo showing the meal set (tenshoku in Japanese). It's one of many Chinese dishes this restaurant serves... and they have **A LOT**!";
NSLog(@"%@", [RegularParser imageUrlsInString:markdownString trimedString:&markdownString]);

 

分享到:
评论

相关推荐

    对接github的markdown项目钩子解析markdown为博客

    用户在编辑器中输入Markdown文本后,JavaScript会捕获这些变化,解析Markdown语法,然后动态更新预览区域的HTML内容。 为了实现与GitHub的对接,我们需要熟悉GitHub的API。GitHub提供了一套RESTful API,允许开发者...

    基于c++的markdown解析器

    Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后...在实际应用中,C++ Markdown解析器可以用于生成项目文档、在线编辑器、博客系统等多个场景,极大地提升了文档的编写和展示效率。

    vuemarkdown一个基于vuejs的markdown语法解析插件

    "vue-markdown"是一个专为Vue.js设计的插件,旨在帮助开发者在Vue应用中解析和渲染Markdown文本。 这个插件的核心功能是将Markdown格式的字符串转化为HTML,以便在Vue组件中显示。Vue.js的组件系统允许我们将界面...

    Laravel开发-markdown Markdown 解析器

    在Laravel中,Markdown解析器通常与Blade模板引擎一起使用,Blade是Laravel提供的一个强大的、灵活的模板系统。通过在Blade模板中使用`@markdown`指令,我们可以直接在视图中嵌入Markdown内容,而无需额外的预处理...

    Python-MarkdownMistune快速并且功能齐全的纯Python实现的Markdown解析

    而Mistune是Python社区中一个非常受欢迎的Markdown解析库,它提供了快速且功能丰富的纯Python实现。 **Markdown Mistune详解** 1. **安装与导入** 在Python环境中,你可以通过`pip`来安装Mistune库: ``` pip ...

    Android平台下的富文本解析器,支持Html和Markdown.rar

    2. `androidx.compose.material.text`:在Jetpack Compose中,可以使用`MarkdownText`组件解析Markdown文本。 五、优化与性能考虑 1. 异步加载:由于解析HTML或Markdown可能涉及网络请求,因此推荐在后台线程进行,...

    Python-自动上传Markdown中图片到图床并替换链接

    5. Markdown解析库:如mistune或markdown-it-py,用于解析Markdown文本,提取图片链接。 6. 文件操作模块:如os和shutil,用于读写文件和处理目录结构。 使用这个工具,Markdown作者可以大大提高效率,无需手动...

    一个用 Python 写的便捷的 MarkDown 解析器 .zip

    Python作为一款强大的编程语言,自然也有许多用于解析Markdown的库,其中就包括了我们今天要讨论的"Mistune"。 "Mistune"是一个用Python编写的高效Markdown解析器,它的特点是快速和轻量级。作为开源项目,Mistune...

    Markdown简易解析器.zip

    此外,Markdown还支持链接、图片、表格等高级特性。了解这些基础语法是使用Markdown解析器的前提。 在JavaScript部分,解析器需要读取Markdown文件的内容。在浏览器环境中,这通常通过`FileReader` API来实现。用户...

    微信小程序Markdown渲染库.zip

    微信小程序Markdown渲染库是一款专为微信小程序设计的Markdown解析和渲染工具,允许开发者在小程序中展示Markdown格式的内容,为用户提供类似Markdown编辑器的功能。这款库通常用于博客、文档展示、笔记应用等场景,...

    Android-一个利用RxJava在TextView和EditText上渲染的markdown解析器

    在Android应用开发中,尤其是在需要编辑或显示带有格式的文本时,Markdown解析器就显得尤为重要。本项目是一个专门针对Android平台的Markdown解析器,它利用了RxJava库来实现在TextView和EditText上的渲染功能。 ...

    markdownit一款优秀的Markdown快速解析器

    这款解析器被设计为快速、小巧且可扩展,能够处理各种Markdown语法,包括但不限于标题、列表、代码块、链接、图片、斜体、粗体等通用特性。Markdownit不仅提供基本的Markdown解析功能,还支持自定义插件来扩展其功能...

    marked3一个快速的markdown解析器和编译器

    总的来说,`marked3`作为一个JavaScript开发中的Markdown解析器和编译器,对于构建Markdown编辑器或处理Markdown内容的Web应用来说,是不可或缺的工具。它的高性能、灵活性和可扩展性使其在众多Markdown解析库中...

    Markdown语法.pdf

    接下来,我们将详细解析Markdown语法的主要知识点。 首先,文档结构的创建是Markdown语法中最基本的功能之一。Markdown使用井号(#)来创建标题。一个井号表示最高级别的标题(h1),两个井号表示次高级别(h2),...

    VUE2.0集成 Markdown 编辑器

    6. **处理Markdown内容**:在Vue组件的方法中,你可能需要解析Markdown内容为HTML,或者将HTML转换回Markdown。可以使用像`marked`或`markdown-it`这样的库来实现这些转换。 7. **监听内容变化**:Vue的`watch`或者...

    Python-markdown图片实用工具

    这个名为"Python-markdown图片实用工具"的项目,正如其标题所示,是一个专门为Markdown文档处理图片的工具。它使得在Markdown格式的文本中插入和管理图片变得更加便捷。Markdown是一种轻量级的标记语言,常用于编写...

    原生Markdown解析器

    通过阅读源码,开发者可以学习如何在Android环境中实现Markdown解析,包括处理各种Markdown语法,如标题、列表、代码块、链接、图片等。 在压缩包子文件的文件名称列表中,“Markdown-master”可能是指项目的主分支...

    Android-MarkdownView-支持Markdown渲染的WebView实现

    MarkdownView是Android开发中一种用于显示Markdown格式文本的WebView实现,它允许开发者在应用程序中方便地展示用Markdown语法编写的文档,同时提供了丰富的定制化选项。Markdown是一种轻量级的标记语言,它允许人们...

    MarkDown本地图片上传工具(windows)

    在Markdown语法中,图片的插入通常需要一个网络上的图片链接,这限制了在没有互联网或者需要离线查看文档时的便利性。针对这一问题,"MarkDown本地图片上传工具(windows)"应运而生。 这个工具专为Windows用户设计...

    MarkdownPapers:用Java实现的Markdown解析器和转换器

    这个过程可能涉及到对原始Markdown文本的样式增强,例如添加CSS样式、插入内联图片、创建超链接等。转换后的HTML保持了Markdown的简洁布局,同时也具备了丰富的Web展示效果。 3. **Maven插件支持**:MarkdownPapers...

Global site tag (gtag.js) - Google Analytics