按不在特定符号之间的符号分割字符串

时间:2019-01-17 12:18:39

标签: javascript regex

仅在“&”不在“ <%”和“%>”符号之间的情况下,才想用“&”分隔字符串。在这些符号之间,我有一些特殊的表达式,在拆分过程中我想忽略它们。仅当文本位于两个最接近的“ <%”文本“%>”之间时,该文本才被视为特殊文本。 它是这样的:

<%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']

我尝试了'\&(?![^<%]*%>)'(?<!(<%))\&(?!(%>)),但这是错误的。

1 个答案:

答案 0 :(得分:1)

我会使用一种解决方法。

  1. 匹配所有<% & %>并将其替换为特殊字符(在我的情况下为_下划线),因此结果为<% _ %>

  2. 现在使用& char

  3. 分割字符串
  4. 最后将特殊字符_替换回&

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'));