爱盲论坛
标题:
语翼电脑版3.01测试发布
[打印本页]
作者:
cdyy
时间:
2020-2-9 11:12
标题:
语翼电脑版3.01测试发布
本帖最后由 cdyy 于 2020-2-9 14:36 编辑
点此下载3.0.1
语翼PC版3.0升级日志。
增加语翼发现推荐内容和语翼有声团队自制节目
以后无论是手机版还是电脑版都可以收听我们的语翼有声自制节目了。
苹果用户暂时还是只能关注我们的微信公众号-语翼有声收听,或关注喜马拉雅电台的语翼有声主播收听
增加强大的智能任务系统
智能任务具体使用方法参见《语翼智能任务用户手册》
增加内置播放器
音频播放支持倍速调节、添加回升、翻转模式、声音渐变
增加自定义热键
增加托盘图标
增加官方通知中心
修正,适配微信2.8.0
支持快捷键发送视频和语音通话
支持快捷键播放语音和打开链接
支持回车弹出窗口。
支持按alt+f4关闭任意在语翼PC版内打开的窗口
支持关闭微信聊天助手,详情请查看快捷键列表
点此下载使用
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:08
提示:
该帖被管理员或版主屏蔽
作者:
cdyy
时间:
2020-2-9 12:08
标题:
回复沙发cdyy
语翼智能任务用户手册
欢迎使用语翼智能任务系统,该系统为语翼科技首发,只为了解决大家在操作电脑的过程中遇到的各种障碍问题,为大家操作电脑便利性提供了解决方案,本系统属于1.0版本,功能有限,后续将不断更新。
网站:http://www.cdyyys.cn/
作者:SmileSky
Built on 16:33 2020/2/7.
? Copyright (c) 2017-2020 语翼科技 版权所有
目录
一、概述
1.1 什么是智能任务?
1.2 语翼智能任务的特色
1.2.1 简单
1.2.2 灵活
1.2.3 稳定
1.2.4 扩展性强
二、操作方法
2.1 默认快捷键
2.2 添加
2.3 删除
2.4 编辑
2.5 启动
三、脚本编写
3.1 文本匹配
3.1.1 精确模式
3.1.1.1 带有双引号
3.1.1.2 省略双引号
3.1.2 正则表达式(正规表达式)
3.1.2.1 一般写法
3.1.2.2 正则表达式的标志
3.1.2.3 常用的正则表达式
3.1.2.4 例子
3.1.2.4.1 /.+?\.mp3/
3.1.2.4.2 /^.{0,2}下载$/
3.1.2.4.3 /1\d{10}/
3.2 脚本语法
3.2.1 控件描述
3.2.1.1 角色名
3.2.1.2 类名
3.2.1.3 控件索引
3.2.1.4 例子
3.2.1.4.1 "确定(O)"<按钮>
3.2.1.4.2 /\*?无标题 - 记事本/<窗口,@2>
3.2.1.4.3 /开始/<按钮,"Start">
3.2.2 命令
3.2.2.1 支持的命令列表
3.2.2.2 例子
3.2.2.2.1 [输入 hello world!]
3.2.2.2.2 [复制]
3.2.2.2.3 [运行 explorer https://www.baidu.com/]
3.2.3 命令用法
3.2.3.1 剪贴板操作
3.2.3.1.1 复制控件文本
3.2.3.1.2 编辑控件文本
3.2.3.2 键盘操作
3.2.3.2.1 按键
3.2.3.2.1.1 键名列表
3.2.3.2.1.2 组合键
3.2.3.2.2 输入
3.2.3.3 点击操作
3.2.3.3.1 点击
3.2.3.3.2 双击
3.2.3.3.3 右击
3.2.3.3.4 静默点击
3.2.3.4 关闭窗口
3.2.3.5 命令行操作
3.2.3.5.1 什么是命令行?
3.2.3.5.2 批处理
3.2.3.5.3 脚本调用命令行的方法
3.2.3.5.4 例子
3.2.3.5.4.1 打开网址
3.2.3.5.4.2 关机
3.2.3.5.4.3 打开文件夹
3.2.3.5.4.4 播放音乐
3.2.3.6 等待
3.2.3.7 队列执行
3.2.4 代码缩进
3.2.5 脚本注释
3.2.6 与用户互动
3.3 附加工具
四、附录
4.1 语翼预制智能任务
4.1.1 寻找下载链接
4.1.2 打开记事本
4.1.3 右键菜单
4.1.4 之多云签到
4.1.5 系统音量
4.2 正则表达式(菜鸟教程)
4.3 联系我们
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:08
标题:
回复板凳cdyy
一、概述
1.1 什么是智能任务?
智能任务(Smart Task)是依赖操作系统的无障碍接口(Accessibility)或自动化测试接口(UI Automation)实现的可以让机器按照是先定义好的规则进行一系列的自动化操作(例如:点击、关闭、查找、删除等)的一套解决方案。
在使用电脑的过程中有很多时候我们会遇到相同的操作,例如先打开个浏览器,输入个网址,找到编辑框输入账号和密码,然后点登录;又或者是有个软件需要每天签到,我们可能会操作好几部……
如果使用智能任务,那么这些繁琐的操作步骤就可委托给电脑自动执行,大大减少工作量,提升了效率。
1.2 语翼智能任务的特色
1.2.1 简单
用户只需要简单的几行规则,就可以实现强大的任务,其中使用的脚本语法容易学容易记。
1.2.2 灵活
虽然脚本语法简单,但实现的功能却不会缩减,并且可以随时写随时测试。
1.2.3 稳定
系统使用主流的python语言编写,底层使用C语言编写,系统内部运行稳定,并且核心框架运用了python的很多特性(生成器、线程安全)保证任务运行不会中途崩溃,对于死循环有了完美的解决方案。
1.2.4 扩展性强
脚本支持的命令比较丰富,支持命令行拓展,理论上想要实现的功能都可以实现。后端有专门的脚本市场,大家可以自行分享和下载。
二、操作方法
2.1 默认快捷键
Ctrl+Windows+T 打开智能任务窗口
Shift+Alt+小键盘4(或小键盘6) 切换任务
Shift+Alt+小键盘5 激活任务
2.2 添加
添加一个新任务只需要按Ctrl+Windows+T(默认热键)打开智能任务窗口,点击“添加智能任务”按钮,在里面找到“名称”编辑框输入一个任务名称,任务名称可以是中文,然后找到“脚本”编辑框,可以在里面输入任务的脚本代码,输入完成可以点击“确定”按钮,新任务就创建完毕。
注:在这个窗口里面可以在“帮助”编辑框查看一些常用命令的用法,还能在“系统”树视图中查看系统内所有控件的层级关系,支持快捷添加到脚本编辑框中,关于脚本的书写将在后续篇幅中讲解。
2.3 删除
删除一个任务,只需要在“任务”列表中选择一项任务后,点击“删除智能任务”按钮即可,删除后不能恢复。
2.4 编辑
如果想要修改一项任务,可以在“任务”列表中选中它,点击“编辑智能任务”,然后就打开了和新增任务时候一样的窗口,里面可以输入名称和脚本内容,如果更改完毕直接点击“确定”按钮,就能完成编辑。
2.5 启动
如果想要启动一项任务,可以按Shift+Alt+小键盘4(或小键盘6)切换到他,然后使用Shift+Alt+小键盘5激活(上述快捷键均为默认热键)。
三、脚本编写
3.1 文本匹配
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:09
标题:
回复地板cdyy
三、脚本编写
3.1 文本匹配
我们的脚本支持两种文本匹配方式,精确匹配和正则匹配。
3.1.1 精确模式
精确模式匹配可以很精准的找到自己想要的信息。
3.1.1.1 带有双引号
这种精确模式需要我们在书写文本时候用双引号括起来,符号为 "" ,注意他是英文状态下的符号,是半角符号,下面篇幅如果没有特殊说明,遇到的符号也应该都是如此。
例如:
"确定(O)"、"取消(C)"、"此电脑"、"百度一下"都属于合法的写法。
3.1.1.2 省略双引号
为了简化书写,如果文本中没有出现我们脚本中的特殊字符,我们可以省略双引号,也就是说在不会产生歧义的时候就可以省略,例如"确定(O)"可以写成确定(O),但是"诊疗方案[第五版]"就不能写成诊疗方案[第五版],因为方括号在我们的脚本中属于特殊符号,是用来包裹命令的特殊符号,如果这样写,他会把“第五版”识别成一条命令。
关于脚本中使用到的一些特殊符号,请参阅3.2节。
3.1.2 正则表达式(正规表达式)
正则表达式是一种高级的文本匹配模式,他用一些特殊的符号表示一个范围内的文本,用它检索符合某种规则的文本(例如手机号、网址等)是非常容易的事情,但是学习成本稍微有些高,但是我们可以不用完全学会,我们可以稍微记忆一些常用的表达式,如果有兴趣可以自行查阅相关资料。
用它来搜索文本效率会非常高,因此十分推荐使用这种模式。
3.1.2.1 一般写法
如果想使用这种匹配模式,需要用两个斜杠把表达式文本括起来,例如/确定/、/取消/,但是如果仅仅只是想匹配这样的“确定”和“取消”,用正则表达式无非有点小题大做了,这完全可以用3.1.1节的精确模式,因为这表达式中并没有含有正则的特殊字符。
3.1.2.2 正则表达式的标志
例如有一个表达式/本地下载|网通下载|下载/i可以匹配到“本地下载”、“网通下载”和“下载”中的任意一个,后面跟随的i表示不区分大小写,这个i就是正则表达式标志。
下面列出常用的正则表达式标志,用作可选参数。
a ASCII对于字符串模式,使\w,\W,,\B,\d,\D匹配相应的ASCII字符类别(而不是整个Unicode类别,这是默认设置)。对于字节模式,只能使用此标志,无需指定。
i IGNORECASE执行不区分大小写的匹配。
l LOCALE使\w,\W,,\B取决于当前的语言环境。
m MULTILINE“^”匹配行首和字符串开头(在换行符之后)。“$”匹配行尾和字符串结尾(在换行符之前)。
s 点“.”完全匹配任何字符,包括换行符。
x VERBOSE忽略空格和注释,以使RE看起来更好。
u UNICODE仅出于兼容性。忽略字符串模式(这是默认设置),并禁止使用字节模式。
3.1.2.3 常用的正则表达式
符号 读法 描述
. 点号 匹配任意的一个字符
\s 小写s 匹配任意一个空白字符,包括空格、换行符、制表符
\S 大写S 匹配任意一个非空白字符
[a-z] 小写a到z 匹配任意一个小写字母
[A-Z] 大写A到Z 匹配任意一个大写字母
\d 小写d 匹配任意一个数字
\D 大写D 匹配任意一个不是数字的字符
* 星号 匹配前面的表达式多次获0次
+ 加号 匹配前面的表达式至少一次
? 问号 匹配前面的表达式1次货0次
*? 星号问号 匹配前面的表达式0次货多次(注意与多次和0次的区别,这边优先0次,如果不满足时才会多次,就是尽可能少的匹配)
+? 加号问号 匹配前面的表达式1次货多次(尽可能少的匹配)
?? 两个问号 匹配前面的表达式0次货1次(优先0次)
{x,y} x到y 匹配前面的表达式最少x次最多y次,省略其中的x货y表示无限次,但是逗号不能省略
{x} x 匹配前面的表达式x次
\n 小写n 匹配换行符
\t 小写t 匹配制表符
\\ 两个反斜杠 匹配一个反斜杠
| 竖杠 分割两个表达式成并列关系,解释为或者的意思
^ 抑扬号 在表达式开头使用,表示从开头开始按照规则搜索,如果开头部分都不满足就视为匹配失败
$ 美元 在表达式末尾使用,表示从末尾开始按照规则搜索,如果末尾都不满足规则就视为匹配失败
注:在开启了m多行模式的标志后,匹配开头和末尾还将检查行首和行尾。
3.1.2.4 例子
3.1.2.4.1 /.+?\.mp3/
此表达式可以找到a.mp3,b.mp3,0.mp3,abcdefg.mp3等等,其中的“.+?”表示匹配任意字符,而且是尽可能少的匹配,以防止把.mp3也匹配进去(属于匹配过头),由于点号“.”是正则的特殊字符,所以“.mp3”中的点号“.”要加反斜杠,就变成了“\.mp3”。
3.1.2.4.2 /^.{0,2}下载$/
此表达式可以匹配带有任何下载字样的文本,并且用美元“$”严格判断“下载”两个字在末尾的情况,“.{0,2}”表示匹配任意的最多两个字符,还使用抑扬号“^”严格匹配在开头的位置,经过这样的设置后,那么他一定只能匹配在4个字符以内的文本了,例如他可以匹配“电信下载”、“网通下载”、“下载”等。
但是不能匹配“下载吧”,因为美元符号限制下载两个字必须在末尾;
也不能匹配“点此直接下载”,因为抑扬号限制开头是任意两个字符,那么就应该是“点此”两个字,在往后匹配是“直接”并不是“下载两个字”,所以就直接判定匹配失败。
3.1.2.4.3 /1\d{10}/
一个简单的匹配手机号的写法,但是并不严谨,“\d{10}”表示匹配10个数字,在这个表达式前面是1,合起来一共是11位数字,但是从第二位开始,有可能匹配到1,那么手机号一般来说没有11开头的,但是这是非常简单的写法。
3.2 脚本语法
3.2.1 控件描述
对于脚本搜索控件,最直接的办法就是用3.1节所说的文本匹配办法,但是有很多控件并没有文本信息,这个时候就只能利用其它额外的一些信息来描述,这些信息包括角色名、类名、找到的先后次序(我们称为序号),并且要把这些信息用尖括号 <> 括起来,里面每一项信息用英文逗号隔开,这种形式的描述称为控件描述,有文本信息的也可使用这种办法更加细致化的描述。
3.2.1.1 角色名
每一个控件(Control)都有他自己的角色名称,用来区分它们各自的职务,比如“编辑框”就是用来录入和浏览文本的,“按钮”就是用来点击操作的,“复选框”就是用来勾选习惯的。
下面列出所有的角色名:
通用,按钮,
日历,复选框,
组合框,自定义,
数据网格,数据项目,
文档,编辑框,
分组,标题,
标题项目,链接,
图形,列表,
列表项目,菜单栏,
菜单,菜单项目,
窗格,进度栏,
单选钮,滚动栏,
语义缩放,分隔符,
滑动器,微调器,
拆分钮,状态栏,
选项卡,选项卡项目,
表格,文本,
拖动,标题栏,
工具栏,工具提示,
树视图,树视图项目,
窗口
3.2.1.2 类名
类是一种描述对象的抽象形式,他可以描述对象的特征,比如人是一个对象,他就属于人类,而人类这个类名所蕴含的信息就是有鼻子、眼睛、嘴巴、可以直立行走、会说话、有丰富的感情等等,可以说在我们生活的世界上万物皆对象,而每个对象都有自己所属的类,并且不仅所属一个类,那么控件也一样,他属于哪个类,就说明他可以拥有什么样的特征。
类名一般有开发者定义,是一串英文字母,因此如果想使用这种办法描述控件,就应该参考3.1节所说的文本匹配方法,对于类名,上面所述的文本匹配规则仍然适用,并且要注意,在这里使用精确文本匹配时,双引号不可省略。
3.2.1.3 控件索引
控件索引是指在按照规则搜索后找到的控件标出的序号,找到的第一个就是1,找到的第二个就是2,如果没有任何搜索规则,则他是相对于整个系统而言,第一个控件就是1,第二个控件就是2。
使用控件索引,需要加一个圈A符号“@”,在后面紧跟数字,并且圈A符号“@”后面支持数学表达式,例如“@1”、“@1+1”、“@3*4”都是合法的。
但是要注意,这个@符号后面的数字(或数学表达式)运算后的值都必须是正整数(大于0的整数),不能是小数,例如“@1”、“@2”、“@222+554”都是合法的,而“@-1”、“@10-20”都不合法,不能是小鱼1的整数,“3.8”、“1.0*44.3”也是不合法的,不能是小数。
3.2.1.4 例子
3.2.1.4.1 "确定(O)"<按钮>
仅仅找出第一个“确定(O)”按钮
3.2.1.4.2 /\*?无标题 - 记事本/<窗口,@2>
用正则方法找出第二个符合条件的“无标题 - 记事本”的窗口,由于当心打开的记事本如果输入过文本,标题栏会多一个星号“*”,用精确文本匹配就很难处理,而用正则就可以轻松找到,并且要注意,这边多出来的是星号“*”属于正则表达式的特殊符号,他在正则表达式中有特殊含义,所以我们必须在他前面加上一个反斜杠“\”才能表示出记事本上面的那个原有的星号“*”。
3.2.1.4.3 /开始/<按钮,"Start">
找出任务栏上面的那个“开始”按钮,其中"Start"是类名,并且此处我们使用的是精确匹配,双引号没有省略。
3.2.2 命令
命令是用户事先定义好在脚本中让机器在控件上做的动作,比如“点击”、“按键”、“复制”等。
书写命令的格式是用英文状态的方括号 [] ,里面写命令名称,如果命令有附加参数,紧接着在后面写,但是要用空格分隔命令名和参数列表,并且有多个参数也要用空格分开。
3.2.2.1 支持的命令列表
追加:追加控件文本到剪贴板
复制:复制控件内容到剪贴板
粘贴:粘贴剪贴板内容到控件
按键:按下键盘的某个键
输入:输入一段文本到控件
运行:运行命令行
清空:清空编辑框
点击:鼠标左键点击控件
双击:鼠标左键双击控件
右击:鼠标右键点击控件
静默点击:静默点击控件
关闭:关闭窗口
等待:等待指定秒数的时间
队列:创建队列
3.2.2.2 例子
3.2.2.2.1 [输入 hello world!]
模拟输入法向控件上打字,内容是“hello world!”。
3.2.2.2.2 [复制]
复制控件的内容到剪贴板上。
3.2.2.2.3 [运行 explorer https://www.baidu.com/]
用浏览器打开百度网站。
3.2.3 命令用法
3.2.3.1 剪贴板操作
3.2.3.1.1 复制控件文本
复制控件文本用[复制]命令,他没有参数表,直接把所对应的控件文本复制下来,用[追加]可以追加文本到剪贴板末尾而不清空原有剪贴板,追加命令也没有参数表。
3.2.3.1.2 编辑控件文本
把剪贴板上面的文本粘贴到编辑框用[粘贴]命令,他没有参数表,如果想要在粘贴之前清空编辑框,可以使用[清空]命令,清空命令也没有参数表,如果想要在粘贴之后换行,可以使用[输入]命令,他的参数就是要输入的文本内容,换行符是\n,所以输入换行符的命令就可以写为[输入 \n]。
3.2.3.2 键盘操作
3.2.3.2.1 按键
如果想在键盘上按下某个键或组合键,可以使用[按键]命令,他的参数表就是需要按下的键名,例如[按键 ENTER]相当于用户按回车键,[按键 BACK]相当于用户按退格键。
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:13
标题:
回复5楼cdyy
3.2.3.2.1 按键
如果想在键盘上按下某个键或组合键,可以使用[按键]命令,他的参数表就是需要按下的键名,例如[按键 ENTER]相当于用户按回车键,[按键 BACK]相当于用户按退格键。
3.2.3.2.1.1 键名列表
按键名称只能使用英文名称,这样表示的才能更加准确,下面是列出的所有支持的键名:
LBUTTON,RBUTTON,#鼠标左、右键
CANCEL,MBUTTON,#取消和鼠标中键
XBUTTON1,XBUTTON2,#鼠标X1、X2
BACK,TAB,#退格和TAB键
CLEAR,RETURN,#清除和回车键
ENTER,SHIFT,#回车和Shift键
CTRL,CONTROL,#Ctrl键
ALT,PAUSE,#Alt和暂停键
CAPITAL,KANA,#大小写和输入法Kana模式键
HANGUEL,HANGUL,#输入法Hangul模式键
JUNJA,FINAL,#输入法Junja和中断模式键
HANJA,KANJI#输入法Hanja和Kanji模式键
ESC,ESCAPE,#ESC键
CONVERT,NONCONVERT,#输入法转换和恢复键
ACCEPT,MODECHANGE,#输入法接受和模式改变请求键
,SPACE,#空格键
PRIOR,NEXT,#上、下翻页键
END,HOME,#行尾、行首键
LEFT,UP,#左、上箭头键
RIGHT,DOWN,#右、下箭头键
SELECT,PRINT,#选择和打印键
EXECUTE,SNAPSHOT,#执行和截图键
INSERT,DELETE,#插入和删除键
HELP,WIN,#帮助和左Windows键
LWIN,RWIN,#左、右Windows键
APPS,SLEEP,#Application和计算机睡眠键
NUMPAD0,NUMPAD1,#数字0和1键
NUMPAD2,NUMPAD3,#数字2和3键
NUMPAD4,NUMPAD5,#数字4和5键
NUMPAD6,NUMPAD7,#数字6和7键
NUMPAD8,NUMPAD9,#数字8和9键
MULTIPLY,ADD,#复制和追加键
SEPARATOR,SUBTRACT,#分隔符和减号键
DECIMAL,DIVIDE,#小数点和除号键
F1,F2,#F1和F2键
F3,F4,#F3和F4键
F5,F6,#F5和F6键
F7,F8,#F7和F8键
F9,F10,#F9和F10键
F11,F12,#F11和F12键
F13,F14,#F13和F14键
F15,F16,#F15和F16键
F17,F18,#F17和F18键
F19,F20,#F19和F20键
F21,F22,#F21和F22键
F23,F24,#F23和F24键
NUMLOCK,SCROLL,#数字和滚动锁定键
LSHIFT,RSHIFT,#左、右Shift键
LCONTROL,RCONTROL,#左、右Ctrl键
LALT,RALT,#左、右Alt键
BROWSER_BACK,BROWSER_FORWARD,#浏览器后退和前进键
BROWSER_REFRESH,BROWSER_STOP,#浏览器刷新和停止键
BROWSER_SEARCH,BROWSER_FAVORITES,#浏览器搜索和收藏键
BROWSER_HOME,VOLUME_MUTE,#浏览器启动主业和静音键
VOLUME_DOWN,VOLUME_UP,#音量减和音量加键
MEDIA_NEXT_TRACK,MEDIA_PREV_TRACK,#媒体下一首和上一首键
MEDIA_STOP,MEDIA_PLAY_PAUSE,#媒体停止和播放暂停键
LAUNCH_MAIL,LAUNCH_MEDIA_SELECT,#启动邮件和选择媒体键
LAUNCH_APP1,LAUNCH_APP2,#启动App1和App2键
OEM_1,OEM_PLUS,#分号和加号键
OEM_COMMA,OEM_MINUS,#逗号和减号键
OEM_PERIOD,OEM_2,#句号和斜杠键
OEM_3,OEM_4,#反撇号和左方括号键
OEM_5,OEM_6,#反斜杠和右方括号键
OEM_7,OEM_8,#OEM_7和OEM_8键
OEM_102,PROCESSKEY,#反斜杠和处理键
PACKET,ATTN,#Packet和Attn键
CRSEL,EXSEL,#CrSel和ExSel键
EREOF,PLAY,#擦除EOF和播放键
ZOOM,NONAME,#放大和保留键
PA1,OEM_CLEAR#PA1和清除键
3.2.3.2.1.2 组合键
我们提供在键盘上按一些组合快捷键,比如Alt+F4键、Ctrl+C键等等,使用组合键的格式是用英文加号“+”把需要的组合键名连接起来,比如我想要按下Windows+R键,可以写为[按键 WIN+R],其中加号“+”一般不要有其他空白字符参与,比如空格。
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:14
标题:
回复6楼cdyy
3.2.3.2.1.2 组合键
我们提供在键盘上按一些组合快捷键,比如Alt+F4键、Ctrl+C键等等,使用组合键的格式是用英文加号“+”把需要的组合键名连接起来,比如我想要按下Windows+R键,可以写为[按键 WIN+R],其中加号“+”一般不要有其他空白字符参与,比如空格。
3.2.3.2.2 输入
输入相当于模拟输入法的功能,比如输入一句话“满堂花醉三千客,一剑霜寒十四州。”,可以使用输入命令[输入 满堂花醉三千客,一剑霜寒十四州。],这样电脑就能模拟用户用输入法打字了,是不是非常漂亮。
同时输入命令还支持发送按键指令,比如如果我想要按下键盘的ABC键,就可以用[输入 ABC]命令;如果想要在输入文本后面紧接着按行尾键,可以写为[输入 ABC{END}],其中使用花括号括起来的属于单个按键指令,如果想要实现组合键,需要用多个花括号,并且是写在一起的,例如[输入 你好{CTRL}{ENTER}]表示输入完“你好”后按下Ctrl+回车,这在一些聊天窗口很有用。
3.2.3.3 点击操作
点击,顾名思义,就是点击屏幕上的区域,我们支持模仿真实鼠标的点击操作。
3.2.3.3.1 点击
点击是鼠标左键点击,他可以点击控件的中心位置,这意味着你需要先用一定的规则找到某个控件,然后才能点击,例如“关闭<按钮>[点击]”,即可自动找到“关闭”按钮自动鼠标左键点击。
3.2.3.3.2 双击
双击是鼠标左键快速点击两次,他可以点击控件的中心位置,这意味着你需要先用一定的规则找到某个控件,然后才能点击,例如“关闭<按钮>[双击]”,即可自动找到“关闭”按钮自动鼠标左键双击。
3.2.3.3.3 右击
右击是鼠标右键点击,这通常是用来弹出菜单用的,例如“此电脑[右击]”,可以找到桌面上的此电脑后,鼠标右键点击,这时应该弹出菜单了。
3.2.3.3.4 静默点击
静默点击功能和鼠标左键点击相同,但是效果却不一样,鼠标点击是模拟真实鼠标点击的,而静默点击是调用了相关无障碍接口实现的,他不需要控件处于显示状态,成功率非常高,但是有些应用程序并没有支持这样的接口,所以静默点击不能使用。
一些游戏程序对于防外挂程序作了很多处理,所以在这种情况下使用真实鼠标点击更加靠谱一些,而静默点击往往就不起作用,但也并不是绝对的,大家可以自行尝试。
静默点击不需要控件处于显示状态,因此点击的时候读屏是不会有相应提示的,而鼠标点击需要控件处于显示状态,并且当点击后控件会被激活焦点,这时候读屏会有提示。
3.2.3.4 关闭窗口
当对于一些窗口操作之后,我们可能需要让他自动关闭窗口,例如我想在记事本中输入完一串文字后,点击保存并且关闭窗口,那么这个命令就很有用,当然关闭窗口也可以使用[按键 Alt+F4]命令完成,但是有些时候并不稳定。
使用关闭的命令格式为[关闭],此命令没有参数表,他需要在我们用规则找到控件之后才能使用,例如“设置<窗口>[关闭]”,可以找到“设置”窗口并且执行关闭操作。
3.2.3.5 命令行操作
上面已经介绍了很多脚本默认实现的一些命令,但是可能有一些需求我们并没有实现,这时候我们可以借助Windows提供的批处理来实现更强大的功能,而我们的脚本就支持了这样的操作。
3.2.3.5.1 什么是命令行?
命令行就是通过给定一段程序的路径和一些参数,就可以执行相应的操作的一串文本。
在Windows中,命令行我们可能已经见过多次,例如使用Windows+R键打开的“运行”窗口,此时就可以在编辑框里面输入命令行了,只是这样的窗口只能执行一行命令,所以我们还经常用到一个专门执行命令行的程序“cmd.exe”,这个程序我们通常叫她命令提示符。
比如大家可以输入:
regedit
这个命令行的意思是打开一个注册表窗口。再比如:
explorer https://www.baidu.com/
这个命令行可以打开浏览器跳转到百度的首页。
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:15
标题:
回复7楼cdyy
3.2.3.5.2 批处理
在Windows中,我们可以把常用的一些命令行写在一个文本文件中,只要把文件扩展名写为“.bat”或“.cmd”就可以让他直接运行。
这样的批处理文件,他可以一行一个命令行,并且可以按照一定的次序执行,已达到运行一次批处理就执行一系列任务的功能,所以我们把它称为“批处理”,同时他和“.exe”可执行文件一样,可以被系统直接执行,所以我们就把它看做一个执行程序完全没问题。
3.2.3.5.3 脚本调用命令行的方法
在语翼智能任务脚本中,我们可以使用[运行]命令来执行命令行,他的参数就是一个命令行,可以是一个“.exe”程序名称,也可以是一个批处理文件名称,但是必须要保证程序在系统环境变量“PATH”的搜索范围内,确保可以正确找到他,通常我们可以把它放在语翼电脑版程序的根目录,或者是系统的路径“C:\Windows\system32\”中。
在脚本中的写法是[运行 要执行的命令行],例如[运行 start notepad],可以打开一个空白的记事本窗口,其中“start”可以省略不写,但是脚本将会一直等待记事本程序关闭后继续运行。
3.2.3.5.4 例子
3.2.3.5.4.1 打开网址
[运行 explorer https://www.baidu.com/],打开百度首页,他是调用默认的浏览器。
如果想要用谷歌浏览器打开,可以写为[运行 chrome https://www.baidu.com/]。
3.2.3.5.4.2 关机
[运行 shutdown -s -t 5],该命令表示计算机将马上在5秒后关机,可以自行修改时间,0表示马上执行关机操作。
如果要取消关机计划,可以改为[运行 shutdown -a]。
3.2.3.5.4.3 打开文件夹
[运行 explorer C:]执行后将会用资源管理器打开C盘,如果想要打开一段文件夹路径,只需要把路径部分写完整,比如[运行 explorer C:\Program Files]就能打开安装软件的默认目录。
3.2.3.5.4.4 播放音乐
[运行 start "" "D:\Only Time.mp3"]执行后会用默认的播放器播放D盘根目录的“Only Time.mp3”,是不是很有趣?
3.2.3.6 等待
如果在脚本中需要推迟一段时间执行一些操作,我们可以使用[等待]命令,他的参数是需要等待的时间,单位是秒,例如:
[等待 10]
[点击]
就会先等待10秒,时间到了才会执行点击操作。
3.2.3.7 队列执行
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:15
标题:
回复8楼cdyy
3.2.3.7 队列执行
当我们需要针对一些操作进行反复操作时,我们可以创建一个队列,把需要反复操作的脚本写在队列所属的管辖范围内,这样他就会按照次序不断地进行循环操作。
具体使用方法是,用命令[队列 队列名称]创建一个队列,队列名称使用英文,名称是在脚本中区分不同队列的唯一标志。
创建好队列,我们就可以把一些操作写在队列中,并且要相对于创建队列的那一行进行代码缩进,使用空格缩进,例如:
[队列 q]
"点赞"<按钮>[点击]
这样,这个“点赞”按钮将会不断地被执行,直到脚本找不到这个按钮为止。
那么如果我想要队列第一次执行点第一个“点赞”按钮,第二次执行点第二个“点赞”按钮能不能实现?没问题。
[队列 q]
"点赞"<按钮,@q>[点击]
没错,就是在寻找“点赞”按钮时,用圈A符号“@”标出他的序号,但是这个序号并不写固定的数字或数学表达式,只是用队列名称代替,这样他就会与队列q关联,他的序号会跟着队列q的运行次数走,当页面上没有这么多按钮时(及当找不到更多的“点赞”按钮时)就会停止队列q的执行。
注意:他只会停止队列q的执行,因为找不到的那个按钮是因为用了队列q的序号,换句话说找不到按钮是由于队列q导致的,所以关联了队列q的“点赞”按钮他有权利中断队列q的执行。
同时,这边的圈A符号“@”也可以使用带有q的数学表达式,例如“@q+5”表示从第六个按钮开始查找,“@q*5”表示只找5的整数倍(5、10、15),如果让0也算进去,就可以改写为“@(q-1)*5”。
另外,在一些文本参数中,也可以引用队列的序号值,例如:
[队列 q]
"点赞"<按钮,@q>[点击]
[输入 点击了第@q个按钮]
这样输入命令输出的结果类似于这样:
点击了第1个按钮
点击了第2个按钮
点击了第n个按钮
...
一些可以使用文本参数的地方都可以引用队列的序号,并且如果需要让队列序号参与数学运算,必须把表达式用小括号括起来 () ,例如:
[输入 点击了第@(q+1)个按钮]
而不能写为
[输入 点击了第@q+1个按钮]
这样只会输出类似于这样的结果:
点击了第1+1个按钮
点击了第2+1个按钮
点击了第n+1个按钮
...
在一个脚本中队列可以创建多个,但是名称不能相同,并且支持队列并列和嵌套关系。例如:
[队列 q]
...
[队列 p]
...
这是两个并行关系的队列。
[队列 q]
...
[队列 p]
...
...
这是个嵌套关系的两个队列,队列p属于队列q,因此队列q每次执行,队列p都将会被执行,嵌套模式最关键是脚本的空格缩进,创建队列p的代码空格数量比创建队列q多了两个。而写在队列p里面的代码缩进要再多两个空格(四个空格),对于代码缩进的说明请参阅3.2.4节。
说到这里有点编程基础的同学可能会问,这不就是循环吗?如果遇到死循环怎么办?
没错,我们可以把队列理解成编程中的循环,但是他比循环更加简单,从语法上看,我们只需要写成[队列 xxx]就可以创建一个循环,比编程中的循环简化了很多。
但是任何循环都有可能进入死循环,或者是短时间内是死循环,这种情况下,大家有编程思想的会认为只能通过强制结束内部线程,或强制结束进程解决,这会有很大线程安全风险,因为指不定什么时候内存就没释放,或者是一个操作根本就没执行完毕导致CPU缓存数据错乱等,但是这些问题我们已经完美解决。
我们利用的是python中生成器的特性,很多代码区域被标记成yield关键字,这样当线程请求退出的时候,可以决定生成器是否继续运行,从而安全的运行代码,即使不小心写了死循环的队列,也不用担心不能结束他的问题了。
3.2.4 代码缩进
为了简化书写,并且又要让代码具有可读性、简洁性、逻辑性,我们的脚本使用了代码缩进的模式(及用空格的数量表示出代码层级的关系)。
例如:
QQ<窗口>
主菜单<按钮>
表示先定位到QQ窗口,然后找到“主菜单”按钮。
用代码缩进可以快速的找到一些控件,而不需要让系统重新在整个系统中查找按钮,因为系统中的控件简直太多了,查找一次会消耗大量资源和时间。
例如:
主菜单<按钮>
加好友<按钮>
这样的代码是不被采纳的,虽然都能先找到QQ的主菜单,然后找到QQ的加好友,但是万一系统里面有另外一个程序也有叫主菜单的按钮,那就可能找错了,另外,系统内部在寻找这两个按钮的时候,都会重新从系统中开始搜索,会消耗大量的时间。
正确的做法应该是:
QQ<窗口>
主菜单<按钮>
加好友<按钮>
这样系统会先找到QQ的窗口,然后才会分别从窗口上找到“主菜单”和“加好友”两个按钮,并且在查找这两个按钮都不会从系统环境中重新搜索,而是直接在QQ窗口上搜索,这样会大大减少搜索的用时。
同时使用这样的代码缩进,我们看起来也更加直观,更加明确,逻辑结构也很强。
3.2.5 脚本注释
在书写脚本的时候,有些时候我们希望写一些中文注释内容,可以方便自己以后查看,也能方便发给朋友让他们学习。
我们在脚本中使用英文井号“#”来注释代码,例如:
#这是一个自动点击网页下载链接的脚本
井号写在一行的开头,这样脚本在运行到这一行的时候会直接跳过。
再比如:
[按键 WIN]#弹出开始菜单
这一行使用按键命令按下了Windows键,并且在后面使用井号注释这是为了弹出开始菜单用的,对于这样的注释,脚本仍然执行这一行并不会跳过,他会扫描这一行井号的位置,从井号开始(当然在井号不在任何引号或括号中)为界限,井号后面的内容会被忽略不执行。
3.2.6 与用户互动
我们的脚本支持与用户进行互动,就是说当用户想要控制脚本如何寻找控件,在1.0的智能任务系统中,我们 实现了用户请求次数,写法是“@usersetting”,这是一个特殊变量。
当用户第一次运行任务,这个变量值就是1,再一次执行任务变量值是2,因此我们可以实现类似下面这样的功能。
如果我想要在网页上查找带有“下载”的链接,我们的写法是:
/下载/<链接>
但是他仅仅是找第一个符合条件的链接,如果我们不想要第一个,或者我们想要把所有符合条件的链接都浏览一遍,我们怎么办呢?
那这次的@usersetting变量就发挥作用了,我们可以改成:
/下载/<链接,@usersetting>
你没看错,有点似曾相识,那是因为我们再一次见到了圈A符号。
在前面的篇幅中我们已经好几次提到这个符号的用法了,他就是为了标出控件索引而设计,那么控件索引具体是多少,就应该看圈A符号后面的表达式了,而usersetting就属于系统级别保留的一个表达式,他记录的就是用户运行任务的次数。
那么在这个寻找链接的例子中,如果用户第一次按下快捷键启动任务,他寻找的就是第一个“下载”链接,而再一次按下运行任务的快捷键,他就会寻找第二个“下载”链接,当在页面上找不到这样的链接时,系统会重置这个变量为1,如果再次按下快捷键他将会从第一个开始。
当然,我们也可以随时切换任务来手动重置这个usersetting变量。
同时,这个usersetting变量也支持参与数学表达式,和队列序号用法一样,可以随时引用他。
3.3 附加工具
为了方便脚本编写,我们提供了一个窗口层级查看工具,当我们打开添加或编辑任务的窗口后,我们可以找到一个“系统”树视图,在这里面我们可以查看到整个系统开启的所有窗口,并且可以浏览窗口中的层级关系。
当我们在树视图中找到自己想要的控件时,可以直接回车添加到脚本中,这时候,有些控件的类名他也会自动填入,这样我们就不用担心不知道如何查看控件的类名了。
另外,因为系统中的控件太多太混乱,我们还提供查找功能,在树视图旁边有个“搜索控件”的编辑框,在里面输入控件的名字,回车就能搜索。
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:16
标题:
回复9楼cdyy
四、附录
4.1 语翼预制智能任务
4.1.1 寻找下载链接
/电信下载|联通下载|网通下载|本地下载|网盘下载|迅雷下载|下载/<链接,@usersetting>
4.1.2 打开记事本
[运行 start notepad]
4.1.3 右键菜单
[等待 1]
[按键 APPS]
4.1.4 之多云签到
#win10
#找到通知区域显示隐藏图标的按钮
/通知 V 形/<按钮,"Button">[静默点击]
#找到之多云的托盘图标
/通知溢出/<窗格,"NotifyIconOverflowWindow">
/之多云-.+?/<按钮>[静默点击]
#此时已经打开了之多云窗口
/之多云-.+?/<窗口,"WindowsForms10.Window.8.app.0.34f5582_r9_ad1">
签到<列表项目>
[按键 ENTER]#回车
#此时已经打开签到的窗口了
/签到 - 之多云/<窗口,"WindowsForms10.Window.8.app.0.34f5582_r9_ad1">
每日签到<列表项目>
[按键 ENTER]#回车
[关闭]#关闭签到窗口
4.1.5 系统音量
/扬声器: \d+%/<按钮>[静默点击]
本帖来自微秘
作者:
cdyy
时间:
2020-2-9 12:17
标题:
回复10楼cdyy
4.2 正则表达式(菜鸟教程)
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
非打印字符
非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:
字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 *,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 \: runo\*ob 匹配 runo*ob。
许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:
特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。
正则表达式的限定符有:
字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
以下正则表达式匹配一个正整数,[1-9]设置第一个数字不是 0,[0-9]* 表示任意多个数字:
/[1-9][0-9]*/
请注意,限定符出现在范围表达式之后。因此,它应用于整个范围表达式,在本例中,只指定从 0 到 9 的数字(包括 0 和 9)。
这里不使用 + 限定符,因为在第二个位置或后面的位置不一定需要有一个数字。也不使用 ? 字符,因为使用 ? 会将整数限制到只有两位数。
如果你想设置 0~99 的两位数,可以使用下面的表达式来至少指定一位但至多两位数字。
/[0-9]{1,2}/
上面的表达式的缺点是,只能匹配两位数字,而且可以匹配 0、00、01、10 99 的章节编号仍只匹配开头两位数字。
改进下,匹配 1~99 的正整数表达式如下:
/[1-9][0-9]?/
或
/[1-9][0-9]{0,1}/
*、+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
例如,您可能搜索 HTML 文档,以查找在 h1 标签内的内容。HTML 代码如下:
<h1>RUNOOB-菜鸟教程</h1>
贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 h1 标记的大于符号 (>) 之间的所有内容。
/<.*>/
非贪婪:如果您只需要匹配开始和结束 h1 标签,下面的非贪婪表达式只匹配 <h1>。
/<.*?>/
也可以使用以下正则表达式来匹配 h1 标签,表达式则是:
/<\w+?>/
通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。
定位符
定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。
正则表达式的定位符有:
字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个单词边界,即字与空格间的位置。
\B 非单词边界匹配。
注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。
若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。
若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。
若要在搜索章节标题时使用定位点,下面的正则表达式匹配一个章节标题,该标题只包含两个尾随数字,并且出现在行首:
/^Chapter [1-9][0-9]{0,1}/
真正的章节标题不仅出现行的开始处,而且它还是该行中仅有的文本。它即出现在行首又出现在同一行的结尾。下面的表达式能确保指定的匹配只匹配章节而不匹配交叉引用。通过创建只匹配一行文本的开始和结尾的正则表达式,就可做到这一点。
/^Chapter [1-9][0-9]{0,1}$/
匹配单词边界稍有不同,但向正则表达式添加了很重要的能力。单词边界是单词和空格之间的位置。非单词边界是任何其他位置。下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现在单词边界后面:
/\bCha/
\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。例如,下面的表达式匹配单词 Chapter 中的字符串 ter,因为它出现在单词边界的前面:
/ter\b/
下面的表达式匹配 Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt:
/\Bapt/
字符串 apt 出现在单词 Chapter 中的非单词边界处,但出现在单词 aptitude 中的单词边界处。对于 \B 非单词边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。
选择
用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。
其中 ?: 是非捕获元之一,还有两个非捕获元是 ?= 和 ?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
反向引用
对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
可以使用非捕获元字符 ?:、?= 或 ?! 来重写捕获,忽略对相关匹配的保存。
反向引用的最简单的、最有用的应用之一,是提供查找文本中两个相同的相邻单词的匹配项的能力。以下面的句子为例:
Is is the cost of of gasoline going up up?
上面的句子很显然有多个重复的单词。如果能设计一种方法定位该句子,而不必查找每个单词的重复出现,那该有多好。下面的正则表达式使用单个子表达式来实现这一点:
实例
查找重复的单词:
var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/ig;
document.write(str.match(patt1));
捕获的表达式,正如 [a-z]+ 指定的,包括一个或多个字母。正则表达式的第二部分是对以前捕获的子匹配项的引用,即,单词的第二个匹配项正好由括号表达式匹配。\1 指定第一个子匹配项。
单词边界元字符确保只检测整个单词。否则,诸如 "is issued" 或 "this is" 之类的词组将不能正确地被此表达式识别。
正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。
表达式的结尾处的不区分大小写 i 标记指定不区分大小写。
多行标记指定换行符的两边可能出现潜在的匹配。
反向引用还可以将通用资源指示符 (URI) 分解为其组件。假定您想将下面的 URI 分解为协议(ftp、http 等等)、域地址和页/路径:
http://www.runoob.com:80/html/html-tutorial.html
下面的正则表达式提供该功能:
实例
输出所有匹配的数据:
var str = "http://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
document.write(arr
);
document.write("<br>");
}
第三行代码 str.match(patt1) 返回一个数组,实例中的数组包含 5 个元素,索引 0 对应的是整个字符串,索引 1 对应第一个匹配符(括号内),以此类推。
第一个括号子表达式捕获 Web 地址的协议部分。该子表达式匹配在冒号和两个正斜杠前面的任何单词。
第二个括号子表达式捕获地址的域地址部分。子表达式匹配非 : 和 / 之后的一个或多个字符。
第三个括号子表达式捕获端口号(如果指定了的话)。该子表达式匹配冒号后面的零个或多个数字。只能重复一次该子表达式。
最后,第四个括号子表达式捕获 Web 地址指定的路径和 / 或页信息。该子表达式能匹配不包括 # 或空格字符的任何字符序列。
将正则表达式应用到上面的 URI,各子匹配项包含下面的内容:
第一个括号子表达式包含 http
第二个括号子表达式包含 www.runoob.com
第三个括号子表达式包含 :80
第四个括号子表达式包含 /html/html-tutorial.html
本帖来自微秘
作者:
zmy
时间:
2020-2-9 15:31
我靠,你们这些手册都哈了多少次了,能不能不要发这些闲言碎语的手册呀?我去。
本帖来自安卓秘书
作者:
天宫太子
时间:
2020-2-9 15:51
标题:
回 12楼zmy说
不发,不一定会操作啊
本楼来自
掌中世界安卓版
作者:
cdyy
时间:
2020-2-9 18:02
标题:
回复12楼zmy
你能操作吗,不看手册,如果可以,请写一个连续循环点击例如,播放,下载,试听,全屏按钮的任务给谈友们看看呢。
本帖来自微秘
欢迎光临 爱盲论坛 (http://amhl.vip/)
Powered by Discuz! X3.2