javascript正则表达式将两种类型的分隔符捕获为一个组

时间:2017-11-28 23:08:02

标签: javascript regex

如果我在这里发布第一个问题时犯了一些错误,请原谅。

我在使用javascript lodash模板时遇到了问题。 我试图重写regex for evaluate delimiter,因此它可以接受两种类型的分隔符并将其捕获为一个组。

首先我尝试了两组做两组

/<%([\s\S]+?)%>|{{([\s\S]+?)}}/

但我最终获得两组,然后我尝试了

/(?:<%|{{)([\s\S]+?)(?:%>|}})/

它工作并捕获了两个组作为一个,但它适用于一些不应该工作的情况 例如:

<% 
  text1 
%>  //should work
{{ text2 }}  //should work
<% text2 }}  // shouldn't work

是否有一种方法可以匹配几个分隔符但只捕获一个组?

2 个答案:

答案 0 :(得分:0)

你必须使用前瞻:

(?:<%(?=[^<>]*%>)|{{(?=[^{}]*}}))(.+?)(?:%>|}})

Live demo

答案 1 :(得分:0)

你可以通过前瞻来实现这一目标:

const regex = /(?:<%(?=.*%>)|{{(?=.*}}))(.+)(?:}}|%>)/

console.log(regex.test('<% Hello World %>')) // true
console.log(regex.test('{{ Hello World }}')) // true
console.log(regex.test('<% Hello World }}')) // false
console.log(regex.test('{{ Hello World %>')) // false

Try it on regex101.com!