2017-07-07 87 views
1

我想用下面的字符串將以下字符串匹配到2組中,但顯然它們在JavaScript中不受支持。JavaScript正則表達式看替代選擇或庫建議

正則表達式:((?<=:).*(?=;))|((?<=,).*$)Online Demo

data:image/jpeg;base64,/abcd1234... 

--> group1: image/jpeg 
--> group2: /abcd1234... 

然後我試圖使用XRegExp庫希望它能支持向後看,但仍然沒有成功。

var XRegExp = require("xregexp"); 
var base64 = "data:image/jpeg;base64,/abcd1234..."; 
base64 = XRegExp.matchRecursive(base64, '((?<=:).*(?=;))|((?<=,).*$)', 'g'); 

,但我得到了以下錯誤:

node_modules/xregexp/xregexp-all.js:3376 
     new RegExp(generated.pattern, generated.flags), 
     ^
SyntaxError: Invalid regular expression: /((?<=:).*(?=;))|((?<=,).*$)/: Invalid group at new RegExp (native) 

我的問題是有辦法上述正則表達式運行使用JavaScript的本地正則表達式解析器可能通過反轉字符串或者是有一個JavaScript庫支持看後面。在此先感謝

+0

你爲什麼試圖挑開一個數據URL ?它來自哪裏,你打算如何處理它? – 2017-07-07 05:28:48

+0

@torazaburo我的最高優先級是從中提取MIME類型 –

+0

我希望獲得將responseType設置爲Blob的URL,然後查詢結果blob的'type'屬性。 – 2017-07-07 05:39:30

回答

1

更具體:

(?=[^:;]*;)([^:;]+)|([^;,]+)$ 

Live demo

或者使用更多的JS:

var re = /:([^:;]+);|,(.*)$/g; 
 
var str = "data:image/jpeg;base64,/abcd1234..."; 
 
var matches; 
 
while ((matches = re.exec(str)) !== null) { 
 
    console.log(matches[1] ? matches[1] : matches[2]) 
 
}