提问者:小点点

多好的正则表达式,可以将括号中的文本与嵌套括号中的文本进行匹配[duplicate]


我需要一些帮助来编写一个正则表达式,该正则表达式将括号中的字符串与嵌套的括号相匹配,并以模式开头。(注意:“父”括号中的文本可能没有嵌套括号)

示例:

一些文本(模式:一些(我想提取的)文本)多一点文本(另一个模式:忽略该文本),可能多一点文本

结果应该是:一些文本(我想提取)

一些文本(模式:一些(我想提取的)文本)多一点文本(另一个模式:忽略该文本),可能多一点文本

结果应该是一些文本(我想提取)

一些文本(模式:我想提取的一些文本)多一点文本(另一种模式:忽略该文本),可能多一点文本

结果应该是我想提取的一些文本

我尝试过的正则表达式类似于/\((模式:?\s?([^\)))\)/gi忽略了嵌套的


共2个答案

匿名用户

要从示例数据中提取文本,我认为可以使用以下正则表达式:

\(模式:?\s?(.?\)?)\)

  • 匹配\(模式
    var string = "Some text (pattern: SOME TEXT THAT (I WANT TO EXTRACT)) a bit more text (another pattern: ignore that text) and may be a little more text Some text (pattern: SOME TEXT THAT I WANT TO EXTRACT) a bit more text (another pattern: ignore that text) and may be a little more text";
    var myRegexp = /\(pattern:?\s?(.+?\)?)\)/g;
    var matches;
    while ((matches = myRegexp.exec(string)) !== null) {
        console.log(matches[1]);
    }

匿名用户

因此,您正在寻找括号中的所有文本,从“模式”开始,后面跟着一个字符串,该字符串可以选择包含一组匹配的括号。

这远不是易读的,但这可以做到:

\(模式:([^()]\[^([^)]*\)[^()]*)\)

换句话说:查找(模式:…)其中要么是一个非圆括号的字符串(我们称它们为NPC-这是[^()]部分),要么是一系列NPC,后跟一个开括号,后跟一系列NPC,后跟一个右括号,还可以选择另一个NPC字符串(这是[^(]\([^)]*)[^()]*部分)。

当然,这不会处理更多的级别或嵌套,但是如果我正确理解了这个问题,您就不需要它(没有办法制定一个处理任意嵌套的regexp)。