yuantian 发表于 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)+' & _
         '{var a="static/css/"+({}{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' & "" & '$4$5')
MsgBox(0,"",$Value2)

最后效果:


再次表示感谢。
{:1_206:}




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

上问题:
1.已知有一大堆字符串(下方为精简后的):
return o.p+"static/js/"+({}||e)+{var a="static/css/"+({}{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)+' & _
         '{var a="static/css/"+({}{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' & "" & '$4$5')
MsgBox(0,"",$Value2)




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

:face (23):

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

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

yuantian 发表于 2021-8-10 22:11:28

刚才竟然看到A版大大回复了。
再一刷新又看不到了

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

同样感谢A版大大

afan 发表于 2021-8-10 22:15:18

yuantian 发表于 2021-8-10 22:11
刚才竟然看到A版大大回复了。
再一刷新又看不到了



“开头不是a的内容”那么比如 ba 应该算吧… 没想到你只针对一个"a"
看你已解决就删了

yuantian 发表于 2021-8-10 22:22:49

afan 发表于 2021-8-10 22:15
“开头不是a的内容”那么比如 ba 应该算吧… 没想到你只针对一个"a"
看你已解决就删了
A版大大,这个的确是解决了。。。

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

yuantian 发表于 2021-8-10 22:31:44

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

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

请教A版大大,如何扩大识别范围?

afan 发表于 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')

yuantian 发表于 2021-8-10 23:24:30

afan 发表于 2021-8-10 22:52
如果只限定不是"a",而不是a开头,那 (?

哇,真的是。真的需要多学习多思考。。
谢谢A版大大
页: [1]
查看完整版本: [已解决]请教正则表达式基础