我想以下列方式分割这类文本:
"string1<%string2%>string3" => [string1, <%string2%>, string3]
"string1<%string2%><%string3%>" => [string1, <%string2%>, <%string3%>]
如何使用正则表达式完成此操作?
答案 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"]