js中用正则表达式根据某个关键字截取此关键字之后的字符串

问题描述:一段字符串里面有多个关键字,把此关键字之后的字符串截取出来一起组成一个键值对
我的思路是用什么来截取,JavaScript提供了三种截取字符串中子串的方法:
1.substring(str,end)
str是必须输入,必须是正值;
end是可选的必须是正值;
根据字面意思,str为截取的开始位置,字符串的第一个字符位置为0;end为截取的结束位置.
substring() 方法返回的子串包括 start 处的字符,但不包括 end 处的字符。
2.slice(str,end)
slice()方法的用法基本跟substring一致,但slice()的参数允许负值;
3.substr(str,length)
str是必须输入,str允许为负值,用法跟slice()一样;
length是截取字符串的长度;
可能是我不能很好地应用这三种方法,我选择了用正则表达式来做,首先用一个数组来存取所有的关键字,然后用正则表达式截取两个关键字之间的字符串,我的代码是:var reg = /keys[v][\\s|\\S]*keys[v+1]/;
var arr=mystr.match(reg)[0];
//这个表示以keys[v]开始keys[v+1]结尾的字符串
但在这里就出现了两个问题,一是需要使用动态拼接正则表达式,二是取到的字符串不能包含关键字keys[v]和keys[v+1]。下面是改进的代码:

var reg = eval('/'+keys[v]+'[\\s|\\S]*'+'(?='+keys[v+1]+')/');
 var arr=mystr.match(reg)[0];

但是这样还是包含了关键字 keys[v],我就用replace()把 keys[v]去掉

 obj[keys[v]] =arr.replace(eval('/'+keys[v]+'/'),'');

大部分已经完成了,但是还有最后一个特殊情况,这里是完整代码

var mystr=" ▇ 基本信息 标题 关于印发《开拓海外文化市场行动计划》(2016-2020年)的通知 流程编号 收文(外)【2016】0144号 流水号类别 外部来文 ▇ 文件信息 来文文号 商服贸发[2016]308号 收文日期 2016-09-14";
    //属性
    var keys=["标题", "流程编号", "流水号类别","来文文号","收文日期"]; 

            function test(keys) {

                    var obj = new Object();
                    for (var v=0; v< keys.length-1; v++) {

                        var reg = eval('/'+keys[v]+'[\\s|\\S]*'+'(?='+keys[v+1]+')/');
                         var arr=mystr.match(reg)[0];

                        obj[keys[v]] =arr.replace(eval('/'+keys[v]+'/'),'');

                    }

                    if(v=keys.length-1){
                        var reg1 = eval('/'+keys[v]+'[\\s|\\S]*'+'/');
                         var arr1=mystr.match(reg1)[0];

                        obj[keys[v]] =arr1.replace(eval('/'+keys[v]+'/'),'');
                        }

                    return obj;
            }

           console.log( test(keys));

其实中间遇到了很多小问题,由于自己的js基础太差了,需要慢慢的积累,又学到了新知识好开心,虽然过程痛苦了一点,不过还好完成了任务。结果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值