2017-05-03 96 views
-1

我已經包含在[字幕] [/字幕]標記之間的字符串中像這樣的HTML字符串:正則表達式匹配 - 的JavaScript

var s = '[marquee]<p>some html here 1</p>[/marquee][marquee]<p>some html here again 2</p>[/marquee]'; 

什麼,我想這樣做是符合這些每一個以每個選框作爲數組元素創建一個數組。

我試過到目前爲止是:

var marqueeArray = s.trim().match(/\[marquee\][\s\S]*\[\/marquee\]/g); 

但我得到的回覆是和融入陣列的1長度都跑馬燈結束了作爲一個字符串是這樣的:

["[marquee]<p>some html here 1</p>[/marquee][marquee]<p>some html here again 2</p>[/marquee]"] 

什麼,我想是這樣的:

["[marquee]<p>some html here 1</p>[/marquee]", "[marquee]<p>some html here again 2</p>[/marquee]"] 

最終我將需要刪除的括號([字幕]和[/選取框])從每個元素中取代並加入一個大字符串用於應用程序。在這個方向上的任何一點都會很棒。

+1

只需使用'[\ S \ S *' – horcrux

+1

您可以使用單曲= s.split(/ \ [\ /?marquee \] /)。join(「」);' – Titus

回答

2

你只需要使用?量詞讓你的搜索懶惰。

如上所述添加?\[marquee\][\s\S]*\[\/marquee\]

Regex101 Demo

+1

這對我需要做的工作。謝謝。 – James

1

下面將匹配所有字幕標記和它們之間的內容。

s.match(/(\[marquee\].*?\[\/marquee\])/g); 

如果你想捕捉的字幕標記之間的內容您可以使用以下方法:?

var pattern = /\[marquee\](.*?)\[\/marquee\]/g; 
var match = pattern.exec(s); 
while(match != null){ 
    console.log(match[1]); // Prints out content between tags 
    match = pattern.exec(s); 
} 
+0

這也適用於我。謝謝。 – James