2017-05-03 86 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