博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
今天折腾这么一个正则
阅读量:6277 次
发布时间:2019-06-22

本文共 1882 字,大约阅读时间需要 6 分钟。

  今天一天折腾了这么一个正则

new Regex(@"^!?\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\s*\(\s*
)|\)(?<-DEPTH>))+?(?(DEPTH)(?!)))>?(?:\s+(['""])([\s\S]*?)\3)?\s*\)");

  话说这个正则是干什么用的,故事是这样的:

  很久很久以前

  我在markdownlite里面抄了个marked里面的正则

  一切都很好。

  突然,

  有用户报我们的markdown不对,

  什么情况?

  一问是link的处理有问题。

  是什么奇葩link那?

  打开一看,

  映入眼帘的是:

[hello](foo(bar).md)

  marked里面的正则会处理成:

hellobar).md)

  确实bar后面都跟)了链接就到处为止了,

  看起来是用户内容有问题啊!

  再跑到github里面一试,

  傻眼了:

  吐血中。。。

  再试了很多case后,

  发现github只要在link target里面的的()是成对出现的就能work。

  于是就有了今天这个正则。

  这个复杂的正则需要这么去理解:

^                                           start of string!?                                          '!' 0~1\[                                          '['((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)    group 1: text\]                                          ']'\s*                                         white spaces\(                                          '('\s*                                         white spaces
) '(' with depth++ | or \)(?<-DEPTH>) ')' with depth-- ) end non-capturing group +? lazy 1~ (?(DEPTH)(?!)) require depth = 0) end group 2: link>? '>' 0~1(?: start non-capturing group \s+ white spaces (['"]) group 3: quote ' or " ([\s\S]*?) group 4: title \3 ref group 3)? end non-capturing group 0~1\s* white spaces\) ')'

转载地址:http://uufva.baihongyu.com/

你可能感兴趣的文章
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>
js中forEach的用法
查看>>
Docker之功能汇总
查看>>
!!a标签和button按钮只允许点击一次,防止重复提交
查看>>
Windows Live Writer
查看>>
HashTable和HashMap
查看>>
51系列小型操作系统精髓 简单实现2
查看>>
OpFlex
查看>>
gray-code——找规律
查看>>