最近特别懒,啥都不想干,直接进入正题吧

以前对正则表达式运用不是很熟,只是用来做一些表单校验。前些天突发奇想地和同事针对”如何用正则表达式获取h2标签内的值”展开了讨论,练习了一下午之后信心爆棚立马想找个需求练练手,我的vscode已经饥渴难耐了。于是找到了之前重复最多的工作——将后端生成的简单的Api文档转成我自己封装的Api请求方法。

后端生成的简单的Api文档(下面就叫它”原文本”吧)就像下面这样

1
2
3
4
5
POST: /market/product_create peerid:true parameters:[sessionid, type, title, description, images]
POST: /common/msgcode peerid:true parameters:[biztype, tel]
GET: /common/peerid peerid:false parameters:[clienttype]
POST: /common/weixin_login peerid:true parameters:[appid, code, redirect_uri]
GET: /common/captcha peerid:true parameters:[sessionid]

而我的Api请求方法是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
captcha(){
return http.get('/common/captcha', { })
}
qrcode(sessionid){
return http.get('/common/qrcode', { sessionid })
}
peerid(clienttype){
return http.get('/common/peerid', { clienttype })
}
msgcode({ biztype, tel }){
return http.post('/common/msgcode', { biztype, tel })
}

原文本中一行就是一个接口,POSTGET是请求方法,后面的路径是请求url,peerid:true这个是设备id可以忽略,每个接口都要带着。接着是parameters请求参数列表。我们需要将这些信息提取出来组成Api请求方法。

下面我们以一个接口为例一步步来实现我们的需求:

正则表达式测试推荐使用http://regexr.com/

  1. 提取请求方法POSTGET
    1
    2
    3
    4
    let text = 'GET: /common/peerid peerid:false parameters:[clienttype]'
    let regx = /POST|GET/g
    console.log(text.match(regx))
    // ["GET"]

我们可以看到匹配到了GET和POST
使用正则表达式匹配文本生成代码-201771911641

  1. 提取请求路径/common/peerid, 这个分为两部分common是模块名,peerid是动作名,即/common/peerid对应的是/:module/:action。他们都有一个特点就是斜线/后面接英文字符、数字或下划线,所以正则表达式可以这样写/\/[\w_]+/g/是特殊字符需要转义,[\w_]中括号表示匹配包含中括号内的任意字符,\w包含了字母和数字,+表示中括号内的内容出现至少1次
    1
    2
    3
    4
    let text = 'GET: /common/peerid peerid:false parameters:[clienttype]'
    let regx = /\/[\w_]+/g
    console.log(text.match(regx))
    // ["/common", "/peerid"]

//TODO