参考菜鸟工具——正则表达式在线测试:https://c.runoob.com/front-end/854/
准备用 aardio 做一个自用的正则工具,效果图如下:
main窗口
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
mainForm = win.form(text="Release-RE";right=799;bottom=591;bgcolor=16777215;border="none")
mainForm.add(
caption={cls="bkplus";text="Release-RE";left=35;top=0;right=160;bottom=32;color=16777215;dl=1;dt=1;font=LOGFONT(h=-16;weight=700);z=5};
custom={cls="custom";left=0;top=32;right=800;bottom=592;bgcolor=16250613;db=1;dl=1;dr=1;dt=1;z=1};
logo={cls="bkplus";text='\uF085';left=6;top=0;right=35;bottom=32;color=16777215;dl=1;dt=1;font=LOGFONT(h=-18;name='FontAwesome');z=4};
navFirst={cls="plus";text="正则";left=166;top=0;right=260;bottom=32;align="left";color=16777215;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF00A';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=3};
navHelp={cls="plus";text="去重";left=260;top=0;right=354;bottom=32;align="left";color=16777215;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF06A';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=6};
plus_setTop={cls="plus";left=667;top=0;right=704;bottom=32;border={radius=4};color=16777215;dr=1;dt=1;font=LOGFONT(h=-14;name='Microsoft YaHei UI');iconStyle={font=LOGFONT(h=-24;name='FontAwesome');valign="bottom"};iconText='\uF204';notify=1;textPadding={left=15};valign="bottom";z=7};
titleBar={cls="bkplus";left=0;top=0;right=800;bottom=32;bgcolor=4079166;dl=1;dr=1;dt=1;forecolor=5720388;linearGradient=30;z=2}
)
/*}}*/
import win.ui.simpleWindow;
var simple_win = win.ui.simpleWindow( mainForm,20,32,32,32);
simple_win.skin(
background = {
hover = 0xFFE8E8E8;
active = 0xffff6666;
default = 0x00000000;
}
color = {
hover = 0xFF4A4A4A;
active = 0xffffffff;
default = 0xffffffff;
}
)
import win.ui.tabs;
var tbs = win.ui.tabs(
mainForm.navFirst,
mainForm.navHelp
);
tbs.skin(
foreground={
active=0xFFFFFFFF;
default=0x00FFFFFF;
hover=0x38FFFFFF
};
color={
default=0xFFFFFFFF;
};
checked={
foreground={default=0xFFFFFFFF;};
color={default=0xFF3E3F40;};
}
)
tbs.loadForm(1,"\dlg\first.aardio" );
tbs.loadForm(2,"\dlg\dedup.aardio" );
tbs.selIndex = 1;
import win.ui.tooltip;
//在所有者窗口 winform 上创建 tooltip 提示控件
var balloonTipCtrl = win.ui.tooltip.tracking(mainForm,false);
mainForm.plus_setTop.onMouseEnter = function(wParam,lParam){
var x,y,cx,cy = mainForm.plus_setTop.getPos(true);
//手动显示提示
if(mainForm.plus_setTop.checked){
balloonTipCtrl.setText("取消置顶").trackPopup(true,x+20,y+cy );
}
else {
balloonTipCtrl.setText("置顶").trackPopup(true,x+20,y+cy );
}
}
mainForm.plus_setTop.onMouseLeave = function(wParam,lParam){
balloonTipCtrl.trackPopup(false); //手动关闭提示
}
mainForm.plus_setTop.skin({
checked = {
iconText = '\uF205';
}
})
mainForm.plus_setTop.oncommand = function(id,event){
win.setTopmost(mainForm.hwnd,mainForm.plus_setTop.checked);
mainForm.plus_setTop.onMouseEnter()
}
mainForm.show();
return win.loopMessage();
tab子窗口
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="设置";right=1199;bottom=759;bgcolor=16777215)
winform.add(
btn_regexFun={cls="plus";text='\uF024 修饰符 \uF0D7';left=1067;top=55;right=1181;bottom=98;bgcolor=16777215;border={color=-12697798;radius=4;width=1};dr=1;dt=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;tabstop=1;z=3};
edit_input={cls="richedit";left=20;top=124;right=1175;bottom=330;color=5722185;db=0.57;dl=1;dr=1;dt=1;font=LOGFONT(h=-14;name='Microsoft YaHei UI');multiline=1;vscroll=1;wrap=1;z=7};
edit_output={cls="richedit";left=24;top=360;right=1173;bottom=737;bgcolor=15791608;color=5722185;db=1;dl=1;dr=1;dt=0.47;font=LOGFONT(h=-14;name='Microsoft YaHei UI');multiline=1;vscroll=1;wrap=1;z=5};
edit_regex={cls="edit";left=83;top=63;right=983;bottom=91;color=8936754;dl=1;dr=1;dt=1;font=LOGFONT(h=-19;name='Microsoft YaHei UI';weight=700);multiline=1;z=9};
plus={cls="plus";left=15;top=115;right=1182;bottom=338;border={color=-3222310;radius=3;width=2};db=0.56;dl=1;dr=1;dt=1;z=6};
plus5={cls="plus";left=15;top=353;right=1182;bottom=746;bgcolor=15791608;border={color=-3222310;radius=3;width=2};db=1;dl=1;dr=1;dt=0.46;z=4};
plus6={cls="plus";left=68;top=55;right=995;bottom=98;border={color=-3222310;width=1};dl=1;dr=1;dt=1;z=8};
plus_regexLeft={cls="plus";text="/";left=14;top=55;right=73;bottom=98;bgcolor=15791608;border={color=-3222310;radius=3;width=1};dl=1;dt=1;font=LOGFONT(h=-19;name='Microsoft YaHei UI';weight=700);textPadding={left=16;top=8;right=16;bottom=8};valign="top";z=1};
plus_regexRight={cls="plus";text="/g";left=991;top=55;right=1056;bottom=98;bgcolor=15791608;border={color=-3222310;radius=3;width=1};dr=1;dt=1;font=LOGFONT(h=-19;name='Microsoft YaHei UI';weight=700);textPadding={left=16;top=8;right=16;bottom=8};valign="top";z=2};
static={cls="static";text="正则筛选 Release Note";left=14;top=8;right=295;bottom=48;center=1;font=LOGFONT(h=-19;name='Microsoft YaHei UI';weight=700);transparent=1;z=11};
static_error={cls="static";text='\uF00D';left=11;top=56;right=51;bottom=96;align="center";center=1;color=255;font=LOGFONT(h=-24;name='FontAwesome');hide=1;notify=1;transparent=1;z=10}
)
/*}}*/
import style;
//winform.btn_regexFun.skin(style.primaryButton);
winform.btn_regexFun.skin(
background={
active=0xFF4A4A4A;
default=3300744;
hover=0xFF4A4A4A
};
foreground={
hover=0xFF3E3F3A
};
color={
active=0xFFFFFFFF;
hover=0xFFFFFFFF
}
)
import preg;
import console;
winform.edit_regex.text = "(?<=[a-zA-Z0-9]{7}[ ]).+(?=\n|\r\n|$)"
winform.edit_input.text = /**20eaa4b JIRA_GAPP-1234: san.zhang_comm_fix: common-A01 aardio 变量传参给 Python 方法
f1419b1 jira_GAPP-9621: si.li_app__fix: common-项目配置
f1419b2 Merge "jira_GAPP-9621: si.li_app__fix: common-项目配置**/
winform.extraction = function(){
var regex_str = winform.edit_regex.text;
var regex = preg(regex_str);
var check = true;
//全局匹配
winform.edit_output.text = null;
try{
for str in regex.gmatch(winform.edit_input.text) {
winform.edit_output.text += str;
}
}
catch(e){
check = false;
}
winform.static_error.hide = check;
}
winform.edit_regex.onChange = function(){
if(owner.onModified)owner.onModified(true);
winform.extraction();
}
winform.edit_input.onChange = function(){
if(owner.onModified)owner.onModified(true);
winform.extraction();
}
winform.show();
win.loopMessage();
return winform;
当前问题
edit 控件文本概率性刷新问题(显示空白)
——已解决:plus 的 richedit 有点问题,如果使用长文本的编辑框就不建议使用plus来做- 特定正则引起死循环:(?<=[a-zA-Z0-9]{7}[ ])
TODO
- 优化正则:不匹配包含以下字串的数据:Merge ” …… “。
- release note去重复:相同 id 只保留一条数据。
- 添加全局匹配、忽略大小写功能。
工程源代码下载
工程源码丢失,参考上述关键代码自行构建。