使用正则表达式使用标记拆分字符串

时间:2015-07-14 11:43:44

标签: javascript regex

我想以下列方式分割这类文本:

"string1<%string2%>string3"   => [string1, <%string2%>, string3]
"string1<%string2%><%string3%>"   => [string1, <%string2%>, <%string3%>]

如何使用正则表达式完成此操作?

3 个答案:

答案 0 :(得分:2)

假设<>未显示在<%%>之外的文字中,您可以改为使用匹配:

"string1<%string2%><%string3%>string4".match(/[^<>]+|<%.*?%>/g)
>>> ["string1", "<%string2%>", "<%string3%>", "string4"]

答案 1 :(得分:1)

这是一种方式:

alert("string1<%string2%><%string3%>".split(/(<%.*?%>)/).filter(Boolean));

(<%.*?%>)正则表达式匹配<%...%> - 类似实体,并捕获它们以便它们保留在结果数组中。另一种正则表达式也可以是(<%(?!%>).*?%>)

使用.filter(Boolean),您将能够摆脱任何空数组元素。

如果<%...%>内没有空格,您可以使用(<%\S+%>)正则表达式。

答案 2 :(得分:0)

你可以这样做:

var re = /(<%[^%]*%>)/;
var m = "string1<%string2%><%string3%>".split(re).filter(Boolean);
//=> ["string1", "<%string2%>", "<%string3%>"]

var m = "string1<%string2%>string3".split(re).filter(Boolean);
//=> ["string1", "<%string2%>", "string3"]