正则表达式周二挑战赛 - 第九周

regex-tuesday,每周二会出一道正则表达式的题目,本周的题目比较简单,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.本周题目的具体要求是把用例中链接的Markdown写法替换成右侧的HTML,一共有两个文本框需要填写,左边的写替换正则,右边的写替换结果.相当于使用"xxoo".replace(/xx/,"oo").

 

查看答案

这个题目主要考察捕获分组和匹配URL的正则写法,懂不懂Markdown的语法并不重要,只需要观察用例.

首先根据第一个用例,写出最初的正则,一共有两个捕获分组(红色部分):

/\[(.+)\]\((.+)\)/    替换为     <a href="$2">$1</a>       //匹配情况7/17

第8个用例误匹配了,是因为使用了非法的协议,我们需要一个匹配URL的正则来替换.+,这个匹配URL的正则(红色部分)就不做讲解了:

/\[(.+)\]\((http:\/\/[A-Za-z0-9-]*(?:\.[A-Za-z-]*)+\/?)\)/    替换为     <a href="$2">$1</a>       //匹配情况13/17

倒数第三个用例误匹配了,是因为开头的l和后面的标记之间缺少空格,所以我们还需要添加一个匹配空格的正则,要么是空格要么就是字符串的开头(红色部分),并且匹配到的空格还要捕获到替换结果中:

/(\s|^)\[(.+)\]\((http:\/\/[A-Za-z0-9-]*(?:\.[A-Za-z-]*)+\/?)\)/    替换为    $1<a href="$3">$2</a>       //匹配情况15/17

最后一个用例和上面类似,在字符串尾部也需要一个这样的限制:

/(\s|^)\[(.+)\]\((http:\/\/[A-Za-z0-9-]*(?:\.[A-Za-z-]*)+\/?)\)(\s|$)/  替换为    $1<a href="$3">$2</a>$4       //匹配情况16/17

倒数第二个用例误匹配了,匹配标记的正则改一下,替换原来的.+:

/(\s|^)\[([^[]+)\]\((http:\/\/[A-Za-z0-9-]*(?:\.[A-Za-z-]*)+\/?)\)(\s|$)/  替换为     $1<a href="$3">$2</a>$4       //匹配情况17/17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值