RegEx:Negated多次查看后退引用

时间:2017-08-22 11:20:56

标签: regex

在RegEx中没有字符的后向引用之前,我们如何前瞻?

假设:

  

我们正在寻找引号内的短语,它可以是多行的“检查我们在这里有回报    但这一行仍然是前一个'a'字符串的一部分。

     

一旦我们有另一个'单引号测试'围绕“双引号”,它就会中断;

一旦他们自己关闭,我们如何寻找双引号和单引号?

我尝试过这种模式,但它不起作用:

/(['"])[^$1]+\1/g

Look here

1 个答案:

答案 0 :(得分:2)

如果您的字符串没有转义序列,那就像使用tempered greedy token之类的

一样简单
/(['"])(?:(?!\1)[\s\S])+\1/g

请参阅regex demo(?:(?!\1)[\s\S])+匹配的任何符号([\s\S])都不是捕获到第1组中的值('")。要同时匹配""'',请将+(1次或更多次出现)替换为*量词(0次或更多次出现)。

如果您有转义序列,可以使用

/(['"])(?:\\[\s\S]|(?!\1)[^\\])*?\1/g

请参阅this demo

查看模式详细信息:

  • (['"]) - 第1组抓取'"
  • (?:\\[^]|(?!\1)[^\\])*? - 0+(但尽可能少)出现
    • \\[^] - 任何转义序列
    • | - 或
    • (?!\1)[^\\] - \以外的任何字符和第1组中的字符
  • \1 - 第1组中保留的值。

注意:JS中的[\s\S]匹配任何包含换行符的字符。一个匹配所有字符的JS唯一构造是[^],从性能的角度来看是优选的,但不建议这样做,因为它在其他正则表达式中不受支持(即它不可移植)。