我之前从未使用过UltraEdit,所以我遇到了困难。我查看了文档并没有看到任何有用的信息。
截至目前,我只是想在当前文件中查找用户已打开的单词,并删除从文件开头到单词的所有内容。
我尝试了
的各种功能UltraEdit.activeDocument
这是我认为我需要使用的,但没有一个有用。我尝试过像
这样的事情search
goto
但他们都失败了。我无法在用户打开的文件中搜索任何内容。
任何有关此功能的帮助或者使用javascript的UltraEdit指南用户指南都将不胜感激。
答案 0 :(得分:1)
使用正常表达式全部替换或使用高级替换选项替换全部来自文件顶部,可以在UltraEdit中轻松完成此操作。
点击替换对话框中的帮助按钮,然后按照指向解释UltraEdit / Unix和Perl正则表达式语法的页面的链接进行操作。通过单击按钮打开正则表达式构建器列表(带放大镜或三角形的按钮,具体取决于UE的版本),还可以直接在替换对话框中提供帮助。
使用 UltraEdit 正则表达式引擎,tagged regular expression搜索字符串为%*^(word^)
,替换字符串为^1
。
%
表示开始一行。*
表示除回车和换行 0 以外的任何字符。^(
... ^)
为word
引用的^1
标记word
,因为word
应保留而不更改任何字母的大小写在*
中运行不区分大小写的替换。搜索字符串非贪婪,这意味着word
会停止在一行中第一次出现word
时匹配字符。
贪婪的搜索表达式匹配行中%?+^(word^)
出现的最后的所有内容,为?+
。 word
表示除换行字符回车和换行 1 以外的任何字符。
注意:非贪婪表达式也会替换^.*(word)
处于行首,尽管没有真正替换/删除。但是,换行指标会将该行标记为被修改。
使用 Unix 正则表达式引擎,搜索字符串必须为\1
,替换字符串为^
。
.*
表示开始一行。(
表示除了回车和换行 0 以外的任何字符,或者说非贪婪的次数。)
... word
为\1
引用的替代word
标记,因为应保留^.+(test)
。贪婪的搜索表达式为.+
。 word
表示 1 或更多次。
注意:非贪婪表达式也会替换^.*?(word)
处于行首,但没有真正替换/删除。
使用功能最强大的 Perl 正则表达式引擎,此任务有很多种可能性。
对于非贪婪或^.+?(word)
或{{1},可以使用类似于UltraEdit / Unix regexp引擎的Perl regular expression using backreferences使用搜索字符串^.*(word)
或^.+(word)
用于贪婪搜索并使用\1
作为替换字符串。
从这里可以看出,Perl regexp引擎有一个特殊的语法来定义一个乘法器,如*
(0次或更多次)或+
次(1次或更多次)贪婪或非贪婪。乘数后的?
使表达式非贪婪。
使用搜索字符串^.+?(word)
可避免在以word
开头的行中更改任何内容。
但Perl regexp引擎支持更像非匹配的lookahead。
使用此任务的超前表达式的Perl regexp搜索字符串为^.+?(?=word)
,替换字符串现在为空字符串。
为什么空替换字符串?
替换字符串现在必须为空,因为搜索时word
现在不再匹配,只是从行的开头到第一次出现word
且至少有1个字符的字符串。
但并非所有Perl regexp引擎都支持。如果word
是较长单词中的子字符串并且替换应删除从行首开始到word
作为整个单词而不是较长单词的一部分的所有字符?/ p>
好吧,Perl regexp引擎支持\<
表示单词的开头,\>
表示单词的结尾,\b
表示任何单词边界(开头或结尾)。
^.+?(?=\<word\>)
或^.+?(?=\bword\b)
会忽略仅包含words
但不包含word
的行。
上面解释的所有可能性也可用于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+"\\>)","");
}
}
}