正则表达式匹配 - javascript

时间:2017-05-03 14:21:57

标签: javascript regex match

我在字符串中的[marquee] [/ marquee]标签之间有一个html字符串,如下所示:

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

我想要做的是匹配这些marquees中的每一个以创建一个数组,每个选框作为数组元素。

到目前为止,我所尝试的是:

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

但是所有我回来的是长度为1的数组。两个marquees最终被包含在这样的一个字符串中:

["[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]"]

最终我将需要从每个元素中删除括号([marquee]和[/ marquee])并替换并加入一个大字符串以在应用程序中使用。在正确的方向上的任何一点也会很好。

2 个答案:

答案 0 :(得分:2)

您只需使用?量词就可以使搜索变得懒惰。

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

Regex101 Demo

答案 1 :(得分: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);
}