2016-09-23 61 views
2

parmaters我有我的網頁上下面的文字:正則表達式匹配的功能

pageTracker._addItem("2040504","JACQXSPINKASS-TX4-8","Jacq Socks","","9.00000","1.0"); 
pageTracker._addItem("2040504","FTWCLSNOCOLOURONE SIZE","Footwear Cleaner","","8.00000","1.0"); 

我想只提取是支架使用的JavaScript函數match()每一行中的參數。我有以下正則表達式,但它不太正確:

/\b_addItem[^);]+/g 

這也匹配_addItem(部分。我怎樣才能調整這隻得到括號內的東西?

Regexr example

在理想情況下它應該匹配與pageTracker._addItem("開始但不包括在匹配的那部分向上到關閉托架的任何字符串。

我會做的匹配使用JavaScript和我不認爲支持一下屁股,如果我是正確的

回答

1

使用後面一個看斷言,但無法捕捉的,前面的文字:

/(?<=pageTracker\._addItem\()[^);]+/g 

請注意,我添加了(到後面的外觀,不捕捉這一點。


現在你已經添加JavaScript代碼,在那裏看的屁股不支持,你必須捕獲一組目標:

/pageTracker\._addItem\(([^);]+)/g 

你的目標將是組1

+0

@geoff JavaScript的溶液做... – Bohemian

0

你可以把它分成兩個正則表達式調用來避免向後看:

var str = 'pageTracker._addItem("2040504","JACQXSPINKASS-TX4-8","Jacq Socks","","9.00000","1.0");\npageTracker._addItem("2040504","FTWCLSNOCOLOURONE SIZE","Footwear Cleaner","","8.00000","1.0");' 
var m,output=[]; 
var re = /^pageTracker._addItem\("(.*)"\)/gm; 
while(m=re.exec(str)) 
    output.push(m[1].split('","')); 

輸出那麼一個二維數組:

[ 
    ["2040504","JACQXSPINKASS-TX4-8","Jacq Socks","","9.00000","1.0"], 
    ["2040504","FTWCLSNOCOLOURONE SIZE","Footwear Cleaner","","8.00000","1.0"] 
] 
0

你可能如下太

var strings = ['pageTracker._addItem("2040504","JACQXSPINKASS-TX4-8","Jacq Socks","","9.00000","1.0");', 
 
       'pageTracker._addItem("2040504","FTWCLSNOCOLOURONE SIZE","Footwear Cleaner","","8.00000","1.0");' 
 
       ], 
 
     args = strings.map(s => s.match(/".*?"/g) 
 
           .map(s => s.replace(/"/g,''))); 
 
console.log(args);