【问题标题】:RegEx to get attributes and body of script tags正则表达式获取脚本标签的属性和正文
【发布时间】:2010-12-17 13:25:00
【问题描述】:

我正在使用这个正则表达式来查找

<script (.|\n)*>(.|\n)*?</script>

问题是,它匹配下面的整个字符串,而不仅仅是单独的每个标签:

<script src="crap2.js"></script><script src="crap2.js"></script>

【问题讨论】:

  • 试试:&lt;script[^&gt;]*&gt;[^&lt;]*&lt;/script&gt;

标签: html regex


【解决方案1】:

我觉得除了RegEx match open tags except XHTML self-contained tags之外什么都不需要说。

【讨论】:

  • 这可能是我见过的任何问题的最佳答案!
  • 这更像是一个评论而不是一个答案。
  • 这是一个糟糕的答案。看,我不是在尝试使用正则表达式来解析 XHTML。我正在尝试匹配 string <script ...></script>。这完全在正则表达式的能力范围内。
  • JamesBrownIsDead,除了您需要注意大小写、空格、HTML cmets、嵌入脚本中的字符串、&lt;pre&gt; 区域...解析 HTML 是一个已解决的问题。
  • 正在解析 HTML。如果你不是,就不会有
【解决方案2】:

出于这个原因以及其他各种原因,您确实最好使用 DOM 来处理 HTML。

【讨论】:

  • 如果您不处理 HTML,为什么将您的问题标记为与 HTML 相关?
  • 因为它是 HTML-[i]related[/i].
【解决方案3】:

将您的第一个 * 更改为 *?

这是非贪婪的“全部匹配”,因此它将匹配下一个“>”之前的最小字符集。

【讨论】:

  • 虽然我同意 JS Bangs 的链接,但我很确定这会解决他的问题
  • 如果有人带着钝刀参加枪战,磨刀会解决他的问题吗?
  • @Svante:是的,只要没有子弹 :)
  • @TheSean:我猜“子弹”是指包含 '' 的 javascript 字符串之类的东西?基本上,您假设没有项目符号。但是如果你珍惜你的生命:如果你看到枪指着你就跑!
【解决方案4】:

尝试从内容中排除任何“

 <script (.|\n)*>(.|\n|[^<])*?</script>

【讨论】:

  • 即使从技术上讲它不是有效的有效 HTML,人们也经常编写如下代码:&lt;script&gt;if(a &lt; b) { /* code */ }&lt;/script&gt;
  • 您并未将&lt; 从带有(.|\n|[^&lt;])*? 的内容中排除。当 &lt; 偶然出现时,将永远不会到达否定字符类,因为 . 元字符已经匹配它。事实上,[^&lt;] 将匹配的唯一字符是 \r(回车符)。
【解决方案5】:
<script[\s\S]*?>[\s\S]*?</script>

这符合最常见的情况,但考虑JS Bangs answer非常很重要。

【讨论】:

    【解决方案6】:

    I'llkeeppostinglinkstomypreviousanswers直到这个问题类型从地球表面消失(希望在10年左右):不要用于不规则语言(如 html 或 xml)的用户正则表达式。请改用解析器。

    【讨论】:

    • 您创建的任何正则表达式都将匹配 javascript 中的结束脚本标记,例如:是的,您 正在解析一种语言。
    • 另一种方法:您正在解析 XML,它一种语言。 (或 XML 的子集 - XML 文档必须有一个根节点,而您的字符串没有)
    【解决方案7】:

    另请参阅本周的 Coding Horror:Parsing Html The Cthulhu Way,其灵感来自 @JS Bangs 链接到的史诗 answer by @bobince

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2011-03-18
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多