正则表达式:仅在未跟随重复字符时匹配

时间:2015-07-30 05:03:05

标签: regex

我使用|突出显示管道/\|(.+?)\|/g之间的所有字词,例如|mathSign|; mathSign将被点燃。

但是,在某些情况下,我们将双管||写成另一个含义如下:

 function |mathSign| (x) {
     return |((x === 0 || isNaN(x)) ? x : (x > 0 ? 1 : -1))|; 
 }

该模式与|((x === 0 || isNaN(x)) ? x : (x > 0 ? 1 : -1))|匹配,这是错误的。正确的人应该忽略中间的||

我尝试使用lookahead概念; /\|(.+?)\|(?!\|)/g为了忽略管道是否跟着另一个管道,然而,仍然没有运气。 任何帮助将不胜感激。

请参阅我的Demo实际操作。

1 个答案:

答案 0 :(得分:1)

认为你的意思是,

\|((?:\|\||[^|])+)\|
  • \|\| - 出现||时贪婪地匹配。
  • | - 或
  • [^|] - 匹配任何字符,但不匹配|
  • + - 一次或多次。

DEMO



var s = "function |mathSign| (x) {\n     return |((x === 0 || isNaN(x)) ? x : (x > 0 ? 1 : -1))|; \n }";
alert(s.match(/\|((?:\|\||[^|])+)\|/g))