1. 程式人生 > >js中用正則表示式根據某個關鍵字擷取此關鍵字之後的字串

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基礎太差了,需要慢慢的積累,又學到了新知識好開心,雖然過程痛苦了一點,不過還好完成了任務。結果圖: