Sublime Text:复杂的正则表达式 - 搜索和替换

Sublime Text: complicated regex - search and replace

我想做一个快速测试,看看 <span ng-bind="test.id"></span> 是否比使用 {{test.id}} 进行数据绑定更好。我可以用正则表达式对整个应用程序执行此操作吗?

我必须确保它不会替换 <div id="chat-{{otherPerson.id}}" ...> 等标签内的变量,因此它只会替换 <div class="message">{{message.body}}</div>.[=15= 等内容]

我还需要能够检查是否使用了过滤器:{{ otherPerson | fullname}}

这甚至可以使用正则表达式,还是我需要编写一个繁重的任务来处理它?

我想你可以使用这个正则表达式:

/(^|(>[^\<]*)|(^[^\<]*))(\{\{[^\{\}]*\}\})/igm

并使用其替代 .

如果我猜对了,你想更换

>\s*\{\{([^|}<]+)\}\}

 ng-bind="">

注意替换前面有space。

对于过滤器外壳,您可以更换

>\s*\{\{([^|}<]+\|[^|}<]+)\}\}

 ng-bind="()">

您可以尝试多遍方法

  1. 搜索正则表达式 "(.*)\{\{([^\|]+?)\}\}(.*)" 替换为 "[[[]]]"
  2. 搜索正则表达式 \{\{\s*([^\|]+?)\s*\}\} 将其替换为 <span data-bind=""></span>
  3. 搜索正则表达式 \[\[\[ 替换为 {{
  4. 搜索正则表达式 \]\]\] 替换为 }}

我相信你应该能够使用这种类型的正则表达式

/([^'"])\{\{([^\}|]+)\}\}/gi
  1. 匹配 1 = 任何不以单引号或双引号开头的内容
  2. 然后有两个左花括号
  3. 匹配 2 = 大括号内的任何内容(如果它有一个或多个字符),直到不是管道或闭花括号
  4. 然后有两个闭合卷曲
  5. 全局和不区分大小写的搜索标志

并替换为

'<span ng-bind=""></span>'

希望对您有所帮助!