找回密码
 加入
搜索
查看: 1884|回复: 6

[网络通信] [已解决]请教正则表达式基础

[复制链接]
发表于 2021-8-10 21:04:27 | 显示全部楼层 |阅读模式
本帖最后由 yuantian 于 2021-8-10 22:00 编辑

==========================================
2021-08-10 21:57:08更新:
感谢Q群老师:风过影相随 @zghwelcome
完美的解决了我的这个问题

正则表达式更改为:
(?i)(?<!a)(\=|\:|\()(\s*?\W+?\/*?)(\/*?)(static|assets|img)(\/)

$Value1 =  'return o.p+"static/js/"+({}[e]||e)+' & _
           '{var a="static/css/"+({}[e]{tag:"sc' & _
           'ript",src:"assets/js/app.min.js"}){img_src: ' & _
           "'assets/images/help-icon.svg'"  & _
           '}{X.a.get("/static/config.json")"'        
$Value2 = StringRegExpReplace($Value1,'(?i)(?<!a)(\=|\:|\()(\s*?\W+?\/*?)(\/*?)(static|assets|img)(\/)','$1$2' & "[KeyWords]" & '$4$5')
MsgBox(0,"",$Value2)

最后效果:


再次表示感谢。





以下为原提问贴:
=========================================
各位老师好,请教一个正则表达式。自己琢磨了好久,实现了大部分功能,但是还是有一点点问题无法解决故发上来请教一下大家(思路比较乱,请各位老师谅解)

上问题:
1.已知有一大堆字符串(下方为精简后的):
return o.p+"static/js/"+({}[e]||e)+{var a="static/css/"+({}[e]{tag:"script",src:"assets/js/app.min.js"}){img_src: 'img/images/help-icon.svg'}{X.a.get("/static/config.json")

2.我如果想要实现将[static|assets|img]这三段字符串前面再增加某些字符串的话,
想到了利用到了正则表达式替换(StringRegExpReplace)的功能,
但是一直都没能完全满足我实际的需求,故向各位老师寻求帮助。

我自己尝试的表达式为:
(?!a)(\=|\:|\()(\s*?\W+?\/*?)(\/*?)(static|assets|img)(\/)

我主要需求是:(需要同时满足以下条件)
1)匹配开头不是a的内容(这里失败了,并未实现此项,但是不影响下面的匹配)
2)字符串前面前段匹配 [ = | : | ( ] ,(匹配等号、冒号、左括号)
3)字符串前面中段匹配 [ " | ' ] ,(匹配双引号或单引号,其中可能会有空格,所以我用了  "(\s*?\W+?\/*?)" )
4)匹配字符串[ static | assets | img ] (仅匹配这三个字符串)
5)匹配字符串后为 [ / ],(匹配字符串后为 /斜杠的)

注:有的时候字符串前可能会有单独的[/斜杠],我为了防止影响,增加了单独的  "(\/*?)",用来去掉影响。


3.最后,上代码:
$Value1 =  'return o.p+"static/js/"+({}[e]||e)+' & _
           '{var a="static/css/"+({}[e]{tag:"sc' & _
           'ript",src:"assets/js/app.min.js"}){img_src: ' & _
           "'assets/images/help-icon.svg'"  & _
           '}{X.a.get("/static/config.json")"'        
$Value2 = StringRegExpReplace($Value1,'(?!a)(\=|\:|\()(\s*?\W+?\/*?)(\/*?)(static|assets|img)(\/)','$1$2' & "[KeyWords]" & '$4$5')
MsgBox(0,"",$Value2)




麻烦各位老师看一下,如果有解出来的,请进一步讲解一下为什么这么写,谢谢!



==========================================
PS:可能我还是没太表述清楚
我想实现的是:

o.p+"static/js               ====>     o.p+"static/js                           (双引号前面不是等号、冒号和左括号,不插入关键字)
var a="static/css          ====>     var a="static/css                       (等号前面包含字母a,不插入关键字)
src:"assets/                 ====>     src:"[KeyWords]assets/              (双引号后面插入[KeyWords])
img_src: 'assets           ====>     img_src: '[KeyWords]assets        (单引号后面插入[KeyWords])
get("/static/config        ====>     get("[KeyWords]static/config      (双引号后,删掉/,再插入[KeyWords])
=========================================

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +60 收起 理由
tubaba + 60 赞一个!分享经验应该给予肯定

查看全部评分

 楼主| 发表于 2021-8-10 22:11:28 | 显示全部楼层
刚才竟然看到A版大大回复了。
再一刷新又看不到了

这里留存一下A版大大的正则
研习一下
(?<=\W)(?!a)(\w*[=:(])(\h*[''"]\h*)/?(static|assets|img)(?=/)


同样感谢A版大大
发表于 2021-8-10 22:15:18 | 显示全部楼层
yuantian 发表于 2021-8-10 22:11
刚才竟然看到A版大大回复了。
再一刷新又看不到了

“开头不是a的内容”  那么比如 ba 应该算吧… 没想到你只针对一个"a"
看你已解决就删了
 楼主| 发表于 2021-8-10 22:22:49 | 显示全部楼层
afan 发表于 2021-8-10 22:15
“开头不是a的内容”  那么比如 ba 应该算吧… 没想到你只针对一个"a"
看你已解决就删了

A版大大,这个的确是解决了。。。

如果这么能解决的话,那么再一个进阶版:
如果再加上一个条件,除包含之前的条件以外,
还不包含 [static|assets|img],路径后面关键字为[config.js|config.json]的,
我修改正则,好像不太起作用:
(?<=\W)(?!a)(\w*[=:(])(\h*[''"]\h*)/?(static|assets|img)(?=/)(?!(config.js|config.json))

 楼主| 发表于 2021-8-10 22:31:44 | 显示全部楼层
afan 发表于 2021-8-10 22:15
“开头不是a的内容”  那么比如 ba 应该算吧… 没想到你只针对一个"a"
看你已解决就删了

A版大大,是我草率了。
目前样本仅仅包含了 只有a在前,
如果字母a前面再包含其他的字母或者数字的话,
上面的正则表达式就失效了。

请教A版大大,如何扩大识别范围?
发表于 2021-8-10 22:52:18 | 显示全部楼层
yuantian 发表于 2021-8-10 22:31
A版大大,是我草率了。
目前样本仅仅包含了 只有a在前,
如果字母a前面再包含其他的字母或者数字的话, ...

如果只限定不是"a",而不是a开头,那 (?<!a) 就行。
Local $sSRERe = StringRegExpReplace($sSource, '(?<!a)([=:(])(\h*[''"]\h*)/?(static|assets|img)(?=/(?!(?:config\.js|config\.json)))', '$1$2■$3')
 楼主| 发表于 2021-8-10 23:24:30 | 显示全部楼层
afan 发表于 2021-8-10 22:52
如果只限定不是"a",而不是a开头,那 (?

哇,真的是。真的需要多学习多思考。。
谢谢A版大大
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 02:18 , Processed in 0.080531 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表