正则表达式可以通过使用否定的外观来排除子字符串

时间:2016-09-06 16:23:22

标签: javascript regex

我的意见是:
<span question_number="18"> blah blah blah 1</span><span question_number="19"> blah blah blah 2</span>

我希望我的正则表达式与此匹配 <span question_number="somenumber">xxxx</span>模式
并且所需的输出是1.somenumber 2.xxxx

我写了一个天真的解决方案,可以涵盖了 <span question_number="18"> blah blah blah 1</span>
<span question_number="19"> blah blah blah 2</span>
注意:他们在不同的路线上 输出为:18blah blah blah 119blah blah blah 2

但输入为<span question_number="18"> blah blah blah 1</span><span question_number="19"> blah blah blah 2</span>时 这是在同一行

我的输出为18blah blah blah 1</span><span question_number="19"> blah blah blah 2

我怎么能绕过这个问题?

更新: 正则表达式:\<span question_number=(?:\")*(\d*)(?:\")*>(.*)<\/span>

testinput:
case1 - &gt;两行代码
<span question_number="54">often graces doorways tied into ropes called</span>
<span question_number="54">often graces doorways tied into ropes called <i>ristras</i>.</span>
           case2 - &gt;一行代码
<span question_number="54">often graces doorways tied into ropes called</span><span question_number="54">often graces doorways tied into ropes called <i>ristras</i>.</span>

2 个答案:

答案 0 :(得分:2)

如果您已经在使用JavaScript / HTML,而不是使用正则表达式从html中提取数据,那么使用浏览器中已有的DOM查询工具通常要容易得多。

const d = document.createElement("div");
d.innerHTML = yourSpanContent;

Array.from(d.querySelectorAll("span")).map(span =>
  `1. ${span.getAttribute("question_number")} 2. ${span.innerText}`
);

如果您使用的HTML已经在DOM中,那么您可以从该DOM中进行选择,并基本上删除前两行。

答案 1 :(得分:0)

这将匹配span标记中的任何内容,无论它在一行中的位置。

 /(<span[^>]*>)[^<]*(<\/span>)/g

你可以发布你的代码吗?