假设我有一个像这样的字符串:

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

我正在尝试提取 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)\):捕获括号内的数字
  • ([\s\S]*?div([\d]) - (\w+) ):“div”之前的一些随机文本,然后捕获 div 后面的数字并- 后面的单词。该语句包含在我想要匹配一次或多次的捕获组中。 regex101 告诉我,我需要将其包装在另一个捕获组中才能获取所有实例。我在 blah!blah 中的文本本质上是 divX - YYYYY 格式,前面有一些随机文本。
  • [\s\S]*?(?!\!blah):以一些随机文本结尾,后面的外观与 !blah 匹配。

Here is it in action

由于某种原因,我没有得到我想要的匹配,正如您在上面的链接中看到的那样。我究竟做错了什么?我上面所做的一些假设是错误的吗?感谢您的帮助

请您参考如下方法:

这个样本怎么样?我用过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);

结果:

[ 
    ["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 用于从 div#1 中检索“1”和“this” -这个

jsfiddle.net

regex101.com

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!