代码之家  ›  专栏  ›  技术社区  ›  Hugo Giffard

使用regex进行特定拆分

  •  0
  • Hugo Giffard  · 技术社区  · 7 年前

    我有一个正则表达式,它是一个例子:

    /par(tir|te|s)|(quitter.*maison)|((heure|quand).*(rendez-vous|journée))/i
    

    我想在正则表达式中用“|”将其拆分,但这个字符不能位于分解的括号内。因此,预期结果必须是:

    1: par(tir|te|s)
    2: (quitter.*maison)
    3: ((heure|quand).*(rendez-vous|journée))
    

    我的脑子有问题,有人能帮我吗?

    3 回复  |  直到 7 年前
        1
  •  0
  •   GalAbra    7 年前

    this old question ,我能够构建 this regex
    它将括号与其内容相匹配,包括前面的文本:

    (?:\w+)?\((?:[^()]*|\((?:[^()]*|\([^()]*\))*\))*\)
    

    然而,我必须说,用正则表达式很难处理嵌套括号。

        2
  •  0
  •   user7125259 user7125259    7 年前

    您可以在此正则表达式上进行拆分,它可以精确地实现您从提供的输入示例中指定的输出:

    /\|(?!(?:\w+\|?)+\))/ig
    
        3
  •  0
  •   Hassan Imam Ravi kant    7 年前

    你可以试试这个正则表达式 /\|(?![^\(]*\))/g

    const str = '/par(tir|te|s)|(quitter.maison)|((heure|quand).(rendez-vous|journée))/i';
    console.log(str.split(/\|(?![^\(]*\))/g));