Regex 正则表达式:匹配a<;tr>;包含字符串的

Regex 正则表达式:匹配a<;tr>;包含字符串的,regex,Regex,我试图匹配包含单词“Source”的所有元素,但其他属性(colspan/width/height、contained及其属性等)未知时。(我知道这可以通过javascript/jQuery选择器完成,但我只是在处理非javascript上下文的HTML。) 目标的示例: <tr> <td>Don't affect this</td> </tr> <tr> <td colspan="3" width="288" height="5

我试图匹配包含单词“Source”的所有
元素,但其他属性(colspan/width/height、contained
及其属性等)未知时。(我知道这可以通过javascript/jQuery选择器完成,但我只是在处理非javascript上下文的HTML。)

目标的示例:

<tr>
<td>Don't affect this</td>
</tr>
<tr>
<td colspan="3" width="288" height="57"><strong>Sources:</strong> Author</td>
</tr>

不要影响这个
来源:作者
(这就是我要将其更改为的内容:)


不要影响这个
来源:作者
以下是我尝试过但不起作用的正则表达式模式:

 /<tr>((?:.*?)Source(?:s?):(?:.*?))<\/tr>/gmi,
/((?:.*)源(?:s?)(?:.*)/gmi,
没有火柴

 /<tr>((?:[\s\S]*?)Source(?:s?):(?:[\s\S]*?))<\/tr>/gmi, 
/((?:[\s]*?)源(?:s?)(?:[\s]*?)/gmi,
匹配第一个tr,但不匹配第二个tr


我想这里有一个正则表达式原理我可能没有掌握,关于贪婪或其他相关的东西。有什么建议吗?

如果您使用像jQuery这样的库,您甚至不需要使用正则表达式:

$('tr:contains("Source")').something...

如果您使用的是像jQuery这样的库,您甚至不需要使用正则表达式:

$('tr:contains("Source")').something...
  • 开场白:
    ]*>
    -开场白
    标签

  • 正常:
    (?:(?!
    )-除了另一个开头
    或结尾
    之外的任何标记。通过使用完整的标记,我们可以避免属性名称或值中“源”一词出现误报

  • 结束:
    -它在这里可能遇到的唯一其他东西是
    标记,这表示我们的匹配失败。在其中一个标记之前查找“source”是我们如何知道我们找到了匹配项。(正则表达式的其余部分,
    [\s\s]*?
    ,仅消耗标记的剩余部分,因此您可以通过
    组[0]
    检索它)

当然,
不一定是无效的;它可能是嵌套的TR元素的开头,可能在嵌套的表元素中。如果TR包含单词“source”,正则表达式将在单独的匹配尝试中匹配它。它将只匹配最里面的完整TR标记和其中的单词“source”

和往常一样,当在HTML上使用正则表达式时,我会做一些简化的假设,包括格式良好、SGML注释、CDATA节等。请注意

  • 开场白:
    ]*>
    -开场白
    标签

  • 正常:
    (?:(?!
    )-除了另一个开头
    或结尾
    之外的任何标记。通过使用完整的标记,我们可以避免属性名称或值中“源”一词出现误报

  • 结束:
    -它在这里可能遇到的唯一其他东西是
    标记,这表示我们的匹配失败。在其中一个标记之前查找“source”是我们如何知道我们找到了匹配项。(正则表达式的其余部分,
    [\s\s]*?
    ,仅消耗标记的剩余部分,因此您可以通过
    组[0]
    检索它)

当然,
不一定是无效的;它可能是嵌套的TR元素的开头,可能在嵌套的表元素中。如果TR包含单词“source”,正则表达式将在单独的匹配尝试中匹配它。它将只匹配最里面的完整TR标记和其中的单词“source”


和往常一样,在HTML上使用正则表达式时,我会做一些简化的假设,包括格式良好、SGML注释、CDATA节等。请注意清空。

“属性…未知”-然后允许属性:
/[\s\s]*?来源:[\s\s]*?/gmi
。请注意,用正则表达式解析HTML是一个坏主意。我发布这篇文章是为了说明更正,但这不应被视为答案。“属性…未知”-然后允许属性:
/[\s\s]*?来源:[\s\s]*?/gmi
。请注意,用正则表达式解析HTML是一个坏主意。我发布这篇文章是为了显示更正,但这不应被视为答案。对,这会起作用,但我正在处理文本以在非javascript上下文中使用。@supertrue oy…请说出上下文是什么。您在哪里使用它。什么语言,等等…对吗,这会起作用,但我正在处理文本,以便在非javascript上下文中使用。@supertrue oy…请说出上下文是什么。您在哪里使用它。什么语言,等等。。。
/<tr[^>]*>(?:(?!<|source)[\s\S])*(?:<(?!\/?tr)[^>]*>(?:(?!<|source)[\s\S])*)*source[\s\S]*?<\/tr>/i
opening normal ( special normal * ) * closing