在SublimeText2中搜索时忽略标记

时间:2016-01-06 16:49:24

标签: html sublimetext2

在HTML文档中工作时,我想查找并替换所有&lt;或者&gt;符号与&amp; gt;或&amp; lt;。是否有任何方法可以轻松地替换内容中的实例,例如在<p>标记中,但不能更改&lt; <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> 标记。和&gt;包装标签?

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

{{1}}

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  1. 查找(?:<)(\w+)([^<>]*?)(?:>)(.*)(?:<)(/\1)(?:>)并替换为@@$1$2@@$3@@$4@@以重新格式化代码对,以保护他们免受后续步骤的影响。
  2. 查找(?:<)(\w+)([^<>]*?/)(?:>)并替换为@@$1$2@@。这将处理像<br/>这样的自终止标记。如果你有
  3. 查找<并替换为||
  4. 查找>并替换为<
  5. 查找||并替换为>
  6. 查找(?:\@\@)(.+?)(?:\@\@)并替换为<$1>以恢复标记。
  7. 当然,您可以将@@||替换为您喜欢的任何内容,只要它们不相同且不会出现在文档的其他位置。只有当您的html符合XHTML标准时,此方法才有效,特别是所有标记必须包含结束标记,并且<img><br>等单个标记必须自动关闭,例如<img/>和{ {1}}