【问题标题】:regex to match only local CSS files正则表达式仅匹配本地 CSS 文件
【发布时间】:2015-06-25 10:56:28
【问题描述】:

我需要从 JavaScript 中的 HTML 字符串中选择本地样式表。如何将以下内容转换为正则表达式?

(file.indexOf('<link rel="stylesheet"') === 0) && (file.indexOf('href="http') === -1)

【问题讨论】:

  • 这是您要匹配的内容吗?
  • 为什么要为此使用正则表达式?有更可靠的方法来处理它。

标签: javascript regex html-parsing


【解决方案1】:

Don't parse HTML with regex! HTML 不是常规语言,使用解析器会得到更好的结果。例如,如果rel 属性出现在href 属性之后怎么办?这是有效的 HTML 语法,但不是您当前尝试处理的场景。这可能会导致问题。

但如果你坚持,你可以这样做:

/<link (?=[^>]*rel=\s*['"]stylesheet['"])(?![^>]*href=\s*['"]http)[^>]*>/i

Demo

编辑 1:处理任一属性顺序

编辑 2:处理单引号或双引号、不区分大小写和间距

【讨论】:

  • 也应该使用不区分大小写,尽管这可能会因为单引号(或没有引号)而失败。
  • var my_string = (document.head || document.getElementsByTagName('head')[0]).innerHTML; (my_string.match(/]*rel="stylesheet")(?![^>]*href="http)[^>]*>/i) == (my_string.indexOf ('
  • @ThanasisGrammatopoulos 我不太确定你在说什么。您是说正则表达式不会产生与原始逻辑相同的结果吗?如果是这样,测试用例(有问题的&lt;link&gt; 的 HTML)将比您发布的 JS 代码更有用。
  • 我同意,我认为这个问题是错误的......第一个 .indexOf 不应该 >=0 ?
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
相关资源
最近更新 更多