2016-11-25 55 views
0

我需要解析以下字符串(解析PDF,希望避免第三方包)。解析爲基於多個分隔符的數組

/類型/頁/多媒體[0 0 612 792] /計數9 /兒童[5 0 R 355 0 R]

我使用Javascript:

String.split(' '); 

的輸出我想得到的是[ '/類型', '/頁數', '/媒體框', '[0 0 612 792]', '/計數', '9', 「/孩子, '[5 0 R 355 0 R]' ]

這導致:以下輸出:[ '< <', '/類型', '/頁數', '/媒體框' , '[0', '0', '612', '792]',

具體而言,我想限定 '[' 和 ']'。使帶子會讀「[5,0,R,355,0,R]」

預計,最終結果是這樣的:

我想看看我是否可以用正則表達式解決這一問題及目前我被卡住了。

+0

您知道示例中的大部分空格是可選的嗎?這些鍵值對也可以寫成'/ Type/Pages/MediaBox [0 0 612 792]/Count 9/Kids [5 0 R 355 0 R]'。你的解析思路太簡單了...此外,還可能有註釋行inbetween ... – mkl

回答

2

這正則表達式來拆分它應該把它

var input = "/Type /Pages /MediaBox [0 0 612 792] /Count 9 /Kids [ 5 0 R 355 0 R ]" 
 
var result = input.match(/(\[[^\]]+\]|\S+)/g) 
 
console.log(result)

作爲解釋,集團每次的護理不是]字符[和]([[^]] +]之間的字符)或一系列不是空格的字符(\ S +)

+0

只需一個指針,OP需要用逗號替換'[..]'中的空格 – Rajesh

+0

選擇此答案,因爲它簡潔明瞭。 – Vinod

1

您可以使用正則表達式返回[...]組,然後您可以用comma替換spaces。然後,你就必須通過spaces

var s = "/Type /Pages /MediaBox [0 0 612 792] /Count 9 /Kids [ 5 0 R 355 0 R ]"; 
 

 
var arr_reg = /\[(.*?)(?:\]|$)/g; 
 
s = s.replace(arr_reg, function(str){ 
 
    str = str.substring(1,str.length-1); 
 
    return "[" + str.trim().replace(/ /g, ',') + "]" 
 
}); 
 
console.log(s.split(' '))

+0

謝謝,請參閱我編輯的問題:請解釋什麼'| $'在正則表達式的結尾? – Vinod

+0

@Vinod *匹配組以']結尾* – Rajesh