0

我以前从未使用过 UltraEdit,所以我遇到了困难。我查看了文档并没有看到任何有用的信息。

截至目前,我只是想在用户打开的当前文件中查找一个单词,并删除从文件开头到该单词的所有内容。

我试过各种功能

UltraEdit.activeDocument

这是我相信我需要使用的,但没有一个有效。我试过像

search
goto

但他们都失败了。我无法让它搜索用户打开的文件中的任何内容。

对此有任何帮助,或者可能是使用 javascript 的 UltraEdit 的指南用户指南,我们将不胜感激。

4

1 回答 1

1

这可以在 UltraEdit 中使用正则表达式Replace All从文件顶部执行或使用高级替换选项Replace all is from top of file最容易地完成。

单击“替换”对话框中的“帮助”按钮,然后点击链接到解释 UltraEdit/Unix 和 Perl 正则表达式语法的页面。通过单击用于打开正则表达式构建器列表的按钮(带有放大镜或三角形的按钮,取决于 UE 的版本),在“替换”对话框中也有直接的帮助。

UltraEdit 正则表达式全部替换

使用带有标记的正则表达式的UltraEdit正则表达式引擎,搜索字符串是,替换字符串是.%*^(word^)^1

  • %表示一行的开始。
  • *表示除回车和换行0次或多次以外的任何字符。
  • ^(...为引用的替换标记 ,^)因为在运行不区分大小写的替换时,应该保留而不更改任何字母的大小写。word^1wordword

搜索字符串是非贪婪的,这意味着在一行中第一次出现时*停止匹配字符。word

一个贪婪的搜索表达式匹配直到最后一次出现word在一行中的所有内容将是%?+^(word^). ?+表示除换行符回车和换行1次或多次以外的任何字符。

注意:非贪婪表达式也会word在行首进行替换,尽管没有真正替换/删除任何内容。但是行更改指示器仍会将该行标记为正在修改。

Unix正则表达式全部替换

使用Unix正则表达式引擎,搜索字符串需要是^.*(word),替换字符串是\1.

  • ^表示一行的开始。
  • .*表示除回车和换行0次或多次非贪婪之外的任何字符。
  • (...为引用的替换标记)应该保留。word\1word

贪婪搜索表达式将是^.+(test).+表示1次或多次。

注意:非贪婪表达式也会word在行首进行替换,尽管没有真正替换/删除任何内容。

Perl 正则表达式 全部替换

使用最强大的Perl正则表达式引擎,这项任务有很多可能性。

可以使用Perl 正则表达式使用反向引用,例如 UltraEdit/Unix 正则表达式引擎使用搜索字符串^.*?(word)或非^.+?(word)贪婪搜索^.*(word)^.+(word)贪婪搜索并\1用作替换字符串。

从这里可以看出,Perl 正则表达式引擎有一个特殊的语法来定义一个乘数,比如*(0 次或多次)或+(1 次或多次)贪婪或非贪婪。乘数之后的A?使表达式不贪心。

使用搜索字符串^.+?(word)可以避免在以 . 开头的行上进行任何替换word

但是 Perl 正则表达式引擎支持的更像是不匹配的前瞻

此任务使用前瞻表达式的 Perl 正则表达式搜索字符串是^.+?(?=word),替换字符串现在是一个空字符串。

为什么是一个空的替换字符串?

替换字符串现在必须为空,因为word搜索现在不再匹配,只是从行首到第一次出现word至少 1 个字符的字符串。

但这并不是 Perl 正则表达式引擎支持的全部。作为较长单词中word的子字符串并且替换应该删除从行首到第一次出现word的整个单词而不是较长单词的一部分的所有字符的情况怎么样?

嗯,Perl 正则表达式引擎支持\<单词的开头和\>单词的结尾以及\b任何单词边界(开头或结尾)的意思。

^.+?(?=\<word\>)或者^.+?(?=\bword\b)例如会忽略包含 just wordsbut not的行word

UltraEdit 脚本要求用户输入单词

上面解释的所有可能性也可以在 UltraEdit 宏和脚本中使用。

脚本解决方案的必要代码向脚本的用户询问一个单词,然后替换从行首到活动文件中第一次出现输入单词的任何内容:

if (UltraEdit.document.length > 0)  // Is any file opened?
{
   // Ask user of the script for the word to search for.
   var sWord = UltraEdit.getString("Please enter the word:",1);

   // Has the script user entered anything at all?
   if (sWord.length)
   {
      // Has the user really entered a word, i.e. the string does not contain
      // any non word character (not being a letter, digit or underscore)?
      if (sWord.search(/\W/) < 0)
      {
         // Define environment for this script.
         UltraEdit.insertMode();
         UltraEdit.columnModeOff();

         // Move caret to top of the active file.
         UltraEdit.activeDocument.top();

         // Define all the Perl regular expression Replace All options.
         UltraEdit.perlReOn();
         UltraEdit.activeDocument.findReplace.mode=0;
         UltraEdit.activeDocument.findReplace.matchCase=false;
         UltraEdit.activeDocument.findReplace.matchWord=false;
         UltraEdit.activeDocument.findReplace.regExp=true;
         UltraEdit.activeDocument.findReplace.searchDown=true;
         if (typeof(UltraEdit.activeDocument.findReplace.searchInColumn) == "boolean") {
            UltraEdit.activeDocument.findReplace.searchInColumn=false;
         }
         UltraEdit.activeDocument.findReplace.preserveCase=false;
         UltraEdit.activeDocument.findReplace.replaceAll=true;
         UltraEdit.activeDocument.findReplace.replaceInAllOpen=false;

         // In JavaScript strings the backslash character is the escape
         // character. Therefore it is necessary to escape each backslash
         // with one more backslash to pass to the Perl regular expression
         // engine the search string containing the two backslashes.

         // Execute the Replace All from top of file.
         UltraEdit.activeDocument.findReplace.replace("^.+?(?=\\<"+sWord+"\\>)","");
      }
   }
}
于 2015-04-04T10:46:08.883 回答