2012-09-08 26 views
2

我正在嘗試JS regX以匹配某些值並將其替換爲標記。所以這是我嘗試的代碼。用於從字符串中過濾關鍵字的正則表達式

content = '<p>[dfp:advertisement:leaderboard:750x90]</p>text here<p>[dfp:advertisement:box1:300x250]</p>'; 
var regX = /([a-zA-Z0-9]*):([0-9]*x[0-9]*)/g; 
match = regX.exec(content); 

好的,問題是這隻會匹配第一個值,而不是第二個值。我添加了/g,但沒有運氣。

感謝您的期待。

+0

你有多個'第二次:單曲 – 11684

回答

1

exec一個單一的通話將只返回第一比賽,甚至與g標誌。但正則表達式將包含狀態,使用相同的正則表達式後續多次調用exec將返回以下匹配項。

從MDN exec documentation

返回的數組具有匹配的文本作爲第一個項目,然後對匹配含有被捕獲

[文本中的每個捕獲括號一項.. 。]

如果您的正則表達式使用「g」標誌,則可以多次使用exec方法在同一個字符串中查找連續的匹配項。

所以這個代碼將從您的例子alert的前兩場比賽:

var content = '<p>[dfp:advertisement:leaderboard:750x90]</p>text here<p>[dfp:advertisement:box1:300x250]</p>'; 

var regX = /([a-zA-Z0-9]*):([0-9]*x[0-9]*)/g; 
var match = regX.exec(content); 
var match2 = regX.exec(content); 

alert(match[0]); 
alert(match2[0]); 

正如其他人已經提到的,你可以改用match上的繩子與多個匹配返回數組。

所以,類似上面的代碼,這個代碼將alert的前兩場比賽,從你的例子:

var content = '<p>[dfp:advertisement:leaderboard:750x90]</p>text here<p>[dfp:advertisement:box1:300x250]</p>'; 
var regX = /([a-zA-Z0-9]*):([0-9]*x[0-9]*)/g; 

var match = content.match(regX); 

alert(match[0]); 
alert(match[1]); 
+0

這個工作。非常感謝您的快速響應。 – user1657151

0

使用content.match而不是regX.exec