woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

EmEditor 的搜索提取宏

1、将最下文本保存为 EmCommnMarco.jsee;

 

2、 宏-〉自定义-〉新建-〉选择 EmCommnMarco.jsee;

image

image 

image

 

3、宏-〉设置为当前宏

image

 

4、按下F4就运行宏了

image

 

 

 

 

 

/**
* 根据输入的正则表达式,提取与之匹配的字符串,并新建一个文档显示所有匹配的字符串,
* 显示时每个匹配项占一行
*
* @author Guapo
* @version v1.0
*/
function getText()
{
    var _regex=prompt("本程序用来提取正则表达式匹配的字符串,请输入正则表达式","");
    if(_regex==""||_regex==null)
    {
        alert("输入为空,请重新输入");
        return;
    }
    var regex=new RegExp(_regex,"gim");
    document.selection.SelectAll();
    var textInCurrentDocument=document.selection.Text;
    var matchResultArray=textInCurrentDocument.match(regex);
    if(matchResultArray)
    {
        var len=matchResultArray.length;
        editor.NewFile();
        for(var i=0;i<len;i++)
        {
            document.writeln(matchResultArray[i]);
        }
    }
    else
    {
        alert("没有找到匹配的字符串");
    }
}

/**
* 拷贝正在编辑的文档的完整路径(含文件名和扩展名)到剪贴板
*
* @author Guapo
* @version v1.0
*/
function copyFullName()
{
    if(document.Saved)
    {
        document.CopyFullName();
    }
    else
    {
        alert("请保存文件后再执行此命令");
    }
}

/**
* 拷贝正在编辑的文档的路径(不含文件名和扩展名)到剪贴板
*
* @author Guapo
* @version v1.0
*/
function copyPath()
{
    if(document.Saved)
    {
        document.CopyPath();
    }
    else
    {
        alert("请保存文件后再执行此命令");
    }
}

/**
* 删除当前正在编辑文档的行首的所有空格(包含Tab键)
*
* @author Guapo
* @version v1.0
*/
function deleteLineStartBlank()
{
    document.selection.Replace("^\\s*","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
}

/**
* 删除当前正在编辑文档的行尾的所有空格(包含Tab键)
*
* @author Guapo
* @version v1.0
*/
function deleteLineEndBlank()
{
    document.selection.Replace("\\s*$","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
}

/**
* 为当前正在编辑文档的每一行的行首添加n个空格
*
* @author Guapo
* @version v1.0
*/
function addBlank2LineStart()
{
    var string_n=prompt("请问您要给行首添加几个空格呢?","1");
    if(isN(string_n))
    {
        var s="";
        var int_n=parseInt(string_n);
        for(var i=0;i<int_n;i++)
        {
            s+=" ";
        }
        s+="\\0";
        document.selection.Replace("^.",s,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
        document.HighlightFind=false;
        return;
    }
    else
    {
        alert("您输入的不正确,请重新输入");
    }
}

/**
* 为当前正在编辑文档的每一行的行尾添加n个空格
*
* @author Guapo
* @version v1.0
*/
function addBlank2LineEnd()
{
    var string_n=prompt("请问您要给行尾添加几个空格呢?","1");
    if(isN(string_n))
    {
        var s="";
        s+="\\0";
        var int_n=parseInt(string_n);
        for(var i=0;i<int_n;i++)
        {
            s+=" ";
        }
        document.selection.Replace(".$",s,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
        document.HighlightFind=false;
        return;
    }
    else
    {
        alert("您输入的不正确,请重新输入");
        return;
    }
}

/**
* 将当前正在编辑文档中的所有>=两个的相连空格替换成一个,只支持英文半角空格
*
* @author Guapo
* @version v1.0
*/
function replace2MoreBlank()
{
    document.selection.Replace(" {2,}"," ",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
}

/**
* 将当前正在编辑文档中的所有>=两个的相连空行替换成一个
*
* @author Guapo
* @version v1.0
*/
function replace2MoreNewLine()
{
    return;
}

/**
* 为当前正在编辑文档中的所有行的行首添加特定的字符串
*
* @author Guapo
* @version v1.0
*/
function addString2LineStart()
{
    var s=prompt("请问您要在行首添加什么字符串呢?","在这里输入要添加的字符串");
    if(s==""||s==null)
    {
        return;
    }
    var t="\\0";
    document.selection.Replace("(^.)|(^\\n)",s+t,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
    document.HighlightFind=false;
}

/**
* 为当前正在编辑文档中的所有行的行尾添加特定的字符串
*
* @author Guapo
* @version v1.0
*/
function addString2LineEnd()
{
    var s=prompt("请问您要在行尾添加什么字符串呢?","在这里输入要添加的字符串");
    if(s==""||s==null)
    {
        return;
    }
    var t="\\0";
    document.selection.Replace("(.$)|(^\\n$)",t+s,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
    document.HighlightFind=false;
}

function isN(s)
{
    if(s==null||s=="")
    {
        return false;
    }
    var array=s.match(/\d+/);
    if(array)
    {
        if(s==array[0])
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

mainMenu=CreatePopupMenu();

mainMenu.Add("拷贝路径(不含文件名)",1);
mainMenu.Add("拷贝完整路径(含文件名)",2);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("利用正则表达式提取字符串",3);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("删除行首所有空格",4);
mainMenu.Add("删除行尾所有空格",5);
mainMenu.Add("行首添加n个空格",6);
mainMenu.Add("行尾添加n个空格",7);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("将>=两个的相连空格替换成一个",8);
mainMenu.Add("将>=两个的相连空行替换成一行",9);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("在行首添加特定的字符串",10);
mainMenu.Add("在行尾添加特定的字符串",11);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("关于",100);
var witchItem=mainMenu.Track();

switch(witchItem)
{
    case 1:
        copyPath();
        break;
    case 2:
        copyFullName()
        break;
    case 3:
        getText();
        break;
    case 4:
        deleteLineStartBlank();
        break;
    case 5:
        deleteLineEndBlank();
        break;
    case 6:
        addBlank2LineStart();
        break;
    case 7:
        addBlank2LineEnd();
        break;
    case 8:
        replace2MoreBlank();
        break;
    case 9:
        replace2MoreNewLine();
        break;
    case 10:
        addString2LineStart();
        break;
    case 11:
        addString2LineEnd();
        break;
    case 100:
        alert("Author:Guapo\nEmail:yangshuai@gmail.com");
        break;
    default:
        break;
}

posted on 2008-11-02 02:49 肥仔 阅读(3752) 评论(1)  编辑 收藏 引用 所属分类: 工具

评论

# re: EmEditor 的搜索提取宏  回复  更多评论   

利用正则表达式提取文本的那个宏我挺喜欢用的
用来分析一些日志很方便,很容易就可以提取出想要的信息
不过这个工具有个缺点就是当文本比较大的时候,效率很低
看了源码发现,它的时间不是消耗在查找,而是消耗在写文本上
它是将匹配结果一行一行地输出
更高效的做法是将字符串在内存拼好,一次性输出
if(matched){
editor.NewFile();
var tmp = [];
for(var i = 0; i < matched.length; i++){
tmp.push(matched[i]);
}
document.write(tmp.join("\n"));
}
测试发现效率高了很多,特此分享,呵呵
2010-10-02 20:59 | vivi

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理