在 SublimeText2 中搜索时忽略标记

Ignore Markup when searching in SublimeText2

在 HTML 文档中工作时,我想查找所有 < 或 > 符号并将其替换为 >;或 <.有什么方法可以轻松替换内容中的实例,比如在 <p> 标签中,但不能更改包装标签的 < 和 >?

编辑: 这是一个简单的例子。在格式化某人的作品(有时是多段技术写作)和 HTML 的格式时,我通常会使用它。我希望能够将小于号和大于号转换为它们的 HTML 代码,而不会弄乱页面的 HTML 标记:

<html>
<head>

</head>
<body>
    <p>I want to convert these characters: < ></p>
    <ul>
        <li>
            Greater than: >
        </li>
        <li>
            Less than: <
        </li>
        <li>Images: <img src="test.jpg"><br><img src="test.jpg"></li>
    </ul>
</body>
</html>

我建议在 search/replace 中使用 Sublime 的正则表达式模式,并使用 lookahead/lookbehind 断言来完成你想要的。我将尝试编写一个示例正则表达式并在完成后立即更新答案,但这应该让您开始探索如何实现您的目标。

更新: 这应该可以帮助您找到不属于正常 HTML/XML 标签的 < 的所有实例。在打开正则表达式模式的情况下在搜索字段中输入 <(?!/?\w+>) 应该会导致它锁定任何不符合 XML/HTML 标签规则的 <

> 会更难,即使可能使用该方法,因为回顾不允许可变长度匹配。解决方案可能是使用第一个正则表达式将 < 替换为文档中未使用的某些字符或字符组合,使用另一个正则表达式交换 >,然后交换替换初始字符的字符<。我也想到了。

另一个更新: 这是我会采取的方法。它需要多个步骤,但很简单:

  1. 找到 (?:<)(\w+)([^<>]*?)(?:>)(.*)(?:<)(/)(?:>) 并用 @@@@@@@@ 替换以重新格式化标记对以保护它们免受后续步骤的影响。
  2. 找到 (?:<)(\w+)([^<>]*?/)(?:>) 并替换为 @@@@。这将处理 self-terminating 标签,如 <br/>。如果你有
  3. 找到 < 并替换为 ||
  4. 找到 > 并替换为 <
  5. 找到||并替换为>
  6. 找到 (?:\@\@)(.+?)(?:\@\@) 并替换为 <> 以恢复标签。

当然,您可以将 @@|| 替换为您喜欢的任何内容,只要它们不相同并且不会出现在文档的其他地方即可。此方法也仅在您的 html 符合 XHTML 时才有效,特别是所有标签都必须具有结束标签,并且 <img><br> 等单个标签必须自闭,例如 <img/><br/>