js中用正則表示式根據某個關鍵字擷取此關鍵字之後的字串
阿新 • • 發佈:2019-01-06
問題描述:一段字串裡面有多個關鍵字,把此關鍵字之後的字串截取出來一起組成一個鍵值對
我的思路是用什麼來擷取,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]。下面是改進的程式碼:
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基礎太差了,需要慢慢的積累,又學到了新知識好開心,雖然過程痛苦了一點,不過還好完成了任務。結果圖: