仅在“&”不在“ <%”和“%>”符号之间的情况下,才想用“&”分隔字符串。在这些符号之间,我有一些特殊的表达式,在拆分过程中我想忽略它们。仅当文本位于两个最接近的“ <%”文本“%>”之间时,该文本才被视为特殊文本。 它是这样的:
<%qwr<%qrw<%tret%>wet%>qwt => only this is scpecial <%tret%>
<%test142%>wqr%>%<%%>qwr%> => only this is <%test142%> and <%%> is special
示例:
1) my&string=21<%253&124%> <&> && => ['my', 'string=21<%253&124%> <', '> ', '', '']
2) new<%<&%235<%test&gg%>&test&f => ['new<%<', '%235<%test&gg%>', 'test', 'f']
3) a&<%&qwer&>ty%>&af => ['a', '<%&qwer&>ty%>', 'af']
我尝试了'\&(?![^<%]*%>)'
和(?<!(<%))\&(?!(%>))
,但这是错误的。
答案 0 :(得分:1)
我会使用一种解决方法。
匹配所有<% & %>
并将其替换为特殊字符(在我的情况下为_
下划线),因此结果为<% _ %>
现在使用&
char
最后将特殊字符_
替换回&
const mySplit = (mystr) => {
const regex = /<%(?!%>).*%>/gm;
const matches = mystr.match(regex);
const tmpreplace = matches.map(e => e.replace(/&/g,'_'));
matches.forEach(e => mystr = mystr.replace(e,tmpreplace));
return mystr.split('&').map(e => e.replace(/_/g,'&'));
}
console.log(mySplit('my&string=21<%253&124%> <&> &&'));
console.log(mySplit('new<%<&%235<%test&gg%>&test&f'));
console.log(mySplit('a&<%&qwer&>ty%>&af'));