我很难建立一个正则表达式
假设有一个html剪辑如下。
我想使用Javascript来剪切<tbody>
部分,其链接为&#34; apple&#34;(<a>
位于<td class="by">
内)
我构造了以下表达式:
/<tbody.*?text[\s\S]*?<td class="by"[\s\S]*?<a.*?>apple<\/a>[\s\S]*?<\/tbody>/g
但结果与我想要的结果不同。每个匹配包含多个<tbody>
块。怎么样?问候!!!!
(我用https://regex101.com/进行了测试,得到了意想不到的选择。请原谅我,我无法解决问题:()
<tbody id="text_0">
<td class="by">
...lots of other tags
<a href="xxx">cat</a>
...lots of other tags
</td>
</tbody>
<tbody id="text_1">
...lots of other tags
<td class="by">
<a href="xxx">apple</a>
</td>
...lots of other tags
</tbody>
<tbody id="text_2">
...lots of other tags
<td class="by">
<a href="xxx">cat</a>
</td>
...lots of other tags
</tbody>
<tbody id="text_3">
...lots of other tags
<td class="by">
...lots of other tags
<a href="xxx">tiger</a>
</td>
...lots of other tags
</tbody>
<tbody id="text_4">
<td class="by">
<a href="xxx">banana</a>
</td>
</tbody>
<tbody id="text_5">
<td class="by">
<a href="xxx">peach</a>
</td>
</tbody>
<tbody id="text_6">
<td class="by">
<a href="xxx">apple</a>
</td>
</tbody>
<tbody id="text_7">
<td class="by">
<a href="xxx">banana</a>
</td>
</tbody>
这就是我期望得到的
<tbody id="text_1">
<td class="by">
<a href="xxx">apple</a>
</td>
</tbody>
<tbody id="text_6">
<td class="by">
<a href="xxx">apple</a>
</td>
</tbody>
答案 0 :(得分:0)
从这个正常工作的正则表达式开始,然后从那里开始:
/<a href="(.*?)">apple<\/a>/g
如果它太宽泛而你想让它更具体,请添加下一个标记:
/<td.*?>\s*<a href="(.*?)">apple<\/a>/g
然后继续:
/<tbody.*?>\s*<td.*?>\s*<a href="(.*?)">apple<\/a>/g
另外,请考虑替代解决方案,例如XPATH。正则表达式无法真正解析HTML的所有变体。
答案 1 :(得分:0)
这不是问题正则表达式部分的答案,但td
元素不应嵌入tr
元素中吗? tr
代表“表格行”,而tbody
代表“表格体”。 tbody
通常将表行分组。不禁止在同一个表中有多个tbody
,但通常没有必要。 (tbody
实际上是可选的;您可以直接在tr
元素中添加table
。)
答案 2 :(得分:0)
首先,Regex不是解析HTML或XML之类的好方法。
我可以修复您的模式以使用此特定示例,但我无法保证它在所有情况下都能正常工作。正则表达式不适合这项工作。
但无论如何,请使用[\s\S]
替换模式中[^<]
的前2个实例。
<tbody.*?text[^<]*?<td class="by"[^<]*?<a.*?>apple<\/a>[\s\S]*?</tbody>