在父匹配中多次匹配捕获组

时间:2017-10-11 02:18:12

标签: javascript regex regex-group

我们说我有一个这样的字符串:

  

hello blah(1)ndnddnnn div1 - this; sdhfdkl; div2 - should i&lt ;; oisdjn   div3 - 被div4 - 被捕获的ois; s; urbb!blah aksdhflakjsfadlfjkbafa; km   blah(2)ndnddnnn div35 - also; sdhfdkl; div24 - 这些i&lt ;; oisdjn div0 -   需要div94 - 捕获ois; s; urbb!blah world

我试图在blah!blah之间提取具体信息。这是我想要的信息的一个例子:

  • 1
    • 1,这个
    • 2,应该
    • 3,是
    • 4,抓获
  • 2
    • 35,也
    • 24,这些
    • 0,需要
    • 94,捕获

这是我尝试使用的正则表达式:

/blah\((\d)\)(([\s\S]*?div([\d]) - (\w+) )+)[\s\S]*?(?!\!blah)/g

这是我对我定义的正则表达式字符串的理解:

  • blah\((\d)\):捕获parens中的数字
  • ([\s\S]*?div([\d]) - (\w+) ):" div"之前的一些随机文本,然后捕获div之后的数字和-之后的单词。此语句包含在我想要匹配一次或多次的捕获组中。 regex101告诉我,我需要将其包装在另一个捕获组中以获取所有实例。 blah!blah中的文字本质上是一个divX - YYYYY格式,前面是一些随机文字。
  • [\s\S]*?(?!\!blah):以一些随机文字结尾,背后的外观与!blah匹配。

Here is it in action

出于某种原因,我没有得到我想要的比赛,你可以在上面的链接中看到。我究竟做错了什么?我上面做的一些假设是不正确的吗?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

这个样本怎么样?我在这种情况下使用了regexObj.exec(str)

示例脚本:



var str = "hello blah(1) ndnddnnn div1 - this ;sdhfdkl;a div2 - should i<;oisdjn div3 - be div4 - captured ois;s;urbb !blah aksdhflakjsfadlfjkbafa;km blah(2) ndnddnnn div35 - also ;sdhfdkl;a div24 - these i<;oisdjn div0 - need div94 - capture ois;s;urbb !blah world";
var re  = /\((\d)\)|div(\d.?)\s-\s(\w.*?)\s/g;
var ar = [];
while ((res=re.exec(str)) !== null) {
  if (res[1]) {
    var temp = res[1];
  } else {
    ar.push([temp, res[2], res[3]]);
  }
};
console.log(ar);
&#13;
&#13;
&#13;

结果:

[
    ["1", "1", "this"],
    ["1", "2", "should"],
    ["1", "3", "be"],
    ["1", "4", "captured"],
    ["2", "35", "also"],
    ["2", "24", "these"],
    ["2", "0", "need"],
    ["2", "94", "capture"]
]
  • \((\d)\)用于检索()所包含的数字。
  • div(\d.?)\s-\s(\w.*?)\s用于检索&#34; 1&#34;和&#34;这个&#34;来自div#1 - this

jsfiddle.net

regex101.com

如果我误解了你的问题,我很抱歉。