javascript - 用于获取 javascript 中特定嵌套元素的正则表达式

标签 javascript regex

我想使用正则表达式获取嵌套在几个元素中的特定元素,而不使用 dom 解析器库和查询选择器方法。

正则表达式:

  <art .*?id="src".*?>(?:\s+)?<section .*?class="product".*?>(?:\s+)?<h3>(?:\s+)?(.+?)(?:\s+)?<\/h3><\/section>(?:\s+)?<\/art>

内容:

<art id="src">
  <section class="product">
    <h3>xvd</h3>
    <p>
     sjfdsjvdvds
    </p>
  </section>
  <section class="product">
    <h3>avdsvd</h3>
    <p>
    djsfdsjgdjs
    </p>
  </section>
  <section class="product">
    <h3>zdvdsv</h3>
    <p>
 safdgdsghhrh
    </p>
  </section>
  <section class="product">
    <h3>dd</h3>
    <p>zscsvdsvdsv</p>
  </section>
</art>

请帮我纠正正则表达式

最佳答案

我的猜测是,您可能可以使用 h3 textContent 来获取这些 h3

<section .*?class="product".*?>\s*<h3>\s*(.+?)\s*<\/h3>.*?<\/section>\s*

然后,如果您必须检查 art 元素,也许可以更改,

<section .*?class="product".*?>\s*<h3>\s*(.+?)\s*<\/h3>.*?<\/section>\s*|<art .*?id="src".*?>

将是一个选项,否则使用 JavaScript 会非常复杂。

Demo

<小时/>

如果您想简化/修改/探索表达式,regex101.com 的右上角面板已对此进行了解释。 。如果您愿意,也可以在 this link 观看,它如何与一些示例输入相匹配。

<小时/>

const regex = /<section .*?class="product".*?>\s*<h3>\s*(.+?)\s*<\/h3>.*?<\/section>\s*|<art .*?id="src".*?>/gs;
const str = `<art id="src">
  <section class="product">
    <h3>xvd</h3>
    <p>
     sjfdsjvdvds
    </p>
  </section>
  <section class="product">
    <h3>avdsvd</h3>
    <p>
    djsfdsjgdjs
    </p>
  </section>
  <section class="product">
    <h3>zdvdsv</h3>
    <p>
 safdgdsghhrh
    </p>
  </section>
  <section class="product">
    <h3>dd</h3>
    <p>zscsvdsvdsv</p>
  </section>
</art>`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

关于javascript - 用于获取 javascript 中特定嵌套元素的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252084/

相关文章:

javascript - 带有分页的 ExtJS 网格,而不是组合框

javascript - 可以居中吗?

javascript - 显示本地用户文件并显示内容

javascript - Jasmine jQuery 循环单元测试

java - 将一个字符串解析为多个变量

php - 将PHP字符串中两个字符之间的数字相乘

java - 验证项目 - 程序不接受用户的第一个输入

正则表达式查找(/替换)字符串中字符的多个实例

c# - 正则表达式捕获外括号之间的所有内容

javascript - 什么时候将 listView itemTemplate 插入到 DOM 中?