上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

正则表达式的使用

[复制链接]
  • TA的每日心情
    无聊
    2023-11-2 17:37
  • 签到天数: 275 天

    [LV.8]以坛为家I

    114

    主题

    452

    回帖

    973

    积分

    荣誉开发者

    积分
    973

    荣誉开发者油中2周年卓越贡献生态建设者

    发表于 2022-10-25 11:45:31 | 显示全部楼层 | 阅读模式
    悬赏1油猫币未解决

    本帖最后由 wwwwwllllk 于 2022-10-25 11:53 编辑

    昨天用到了,所以记录一下。
    主要注意的点,new RegExp里面传入不是字符串,如果你传入的是字符串,就涉及到了转义了。(为什么会注意到这个点,因为系统采用的可配置的正则匹配,通过后天系统设置的正则匹配规则)

    image.png

    image.png

    所以我们可以得出结论,字符串中只有\会出现问题,如果要写反斜杠要写两次\,斜杠写一次就好了(只要我们涉及到\d,字符串中就要写成\d, \w=>\w)

    然后就是exec的用法,这里也没有彻底搞懂,但是感觉其实也用不到,下面的案例可以参考,案例写法就可以。感觉test,match,replace就够用了。

    
    // var patt1=new RegExp('/+')
    // console.log(patt1);
    // let a = patt1.exec("%1212323//42434,.123%123")
    // console.log(a);
    // 最终搞出来了
    var patt1=new RegExp('\\d+','g')
    console.log(patt1);
    let a = patt1.exec("%121232342434,.123%123")
    console.log(a);
    
    // 正则写法1
    // var patt1=new RegExp(/\d+/g)
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则写法2
    // /\/d+\/g/
    // /\d+/g
    // var patt1=new RegExp('\\d+')
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则写法3
    // var patt1=new RegExp('\\d+','g')
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则写法4
    // var patt1= /\d+/g
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则工具地址https://c.runoob.com/front-end/854/
    // 正则中match的使用
    // var pattern = /[0-9]+/g
    // var str = '123abc456def'
    // console.log(str.match(pattern));
    
    // exec注意事项,/g要加,while里面arr = pattern.exec(str)要加,否则就会造成死循环,相信我不会用exec了,因为没必要,match,replace一般的问题都可以解决
    // var pattern = /[0-9]+/g
    // var str = '123abc456def'
    // let arr = pattern.exec(str)
    // while(arr != null){
    //   console.log(arr);
    //   arr = pattern.exec(str)
    // }
    
    // let str="web2.0 .net2.0";
    // let pattern=/(\w+)(\d)\.(\d)/g;//有全局标志g
    // let arr = pattern.exec(str);
    
    // while(arr !== null) {
    //     console.log(`匹配${arr[0]}成功,该结果的起始位置在${pattern.lastIndex}`);
    //     // 匹配web2.0成功,该结果的起始位置在6
    //     // 匹配net2.0成功,该结果的起始位置在14
    //     arr = pattern.exec(str);
    // }
    // console.log(arr);
    
    
    
    // 正则写法1
    var patt1=new RegExp(/\d+/g)
    console.log(patt1);
    let a = patt1.exec("%121232342434,.123%123")
    console.log(a);
    
    // 正则写法2
    // /\/d+\/g/
    // /\d+/g
    // var patt1=new RegExp('\\d+')
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则写法3
    // var patt1=new RegExp('\\d+','g')
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则写法4
    // var patt1= /\d+/g
    // console.log(patt1);
    // let a = patt1.exec("%121232342434,.123%123")
    // console.log(a);
    
    // 正则工具地址https://c.runoob.com/front-end/854/
    // 正则中match的使用
    // var pattern = /[0-9]+/g
    // var str = '123abc456def'
    // console.log(str.match(pattern));
    
    // exec注意事项,/g要加,while里面arr = pattern.exec(str)要加,否则就会造成死循环,相信我不会用exec了,因为没必要,match,replace一般的问题都可以解决
    var pattern = /[0-9]+/g
    var str = '123abc456def'
    let arr = pattern.exec(str)
    while(arr != null){
      console.log(arr);
      arr = pattern.exec(str)
    }
    
    // let str="web2.0 .net2.0";
    // let pattern=/(\w+)(\d)\.(\d)/g;//有全局标志g
    // let arr = pattern.exec(str);
    
    // while(arr !== null) {
    //     console.log(`匹配${arr[0]}成功,该结果的起始位置在${pattern.lastIndex}`);
    //     // 匹配web2.0成功,该结果的起始位置在6
    //     // 匹配net2.0成功,该结果的起始位置在14
    //     arr = pattern.exec(str);
    // }
    // console.log(arr);```

    接脚本定制
    I frequently record, because want to leave something.
  • TA的每日心情
    开心
    2024-4-14 00:00
  • 签到天数: 119 天

    [LV.6]常住居民II

    29

    主题

    599

    回帖

    536

    积分

    专家

    积分
    536

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-10-25 13:47:35 | 显示全部楼层
    本帖最后由 脚本体验师001 于 2022-10-25 13:48 编辑

    兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入

    这玩意让我设计应该是这样的:
    找数字="123abc456".exec("数字找出来", "差不多就完事了")
    console.log(找数字);

    咦还真找出来了,不孬家伙!
    入驻爱发电 让这世界充满爱 https://afdian.net/a/vpannice
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    59

    回帖

    88

    积分

    初级工程师

    积分
    88
    发表于 2022-10-25 14:21:38 | 显示全部楼层

    呃呃,说实话语言描述挺混乱的,没看懂到底文章想表达什么

    可能是我太飞舞了看不懂大佬的文章?

    文章中 有问题 的准确定义是什么?期望行为是什么?实际行为又是什么?

    你在控制台输入 patt1 然后回车后输出 /\d+\// 是因为隐式调用了 patt1.valueOf() 会自动给字符串首尾加上 /

    如果你不想要首尾的 // ,那用 patt1.source 就行


    然后就是exec的用法,这里也没有彻底搞懂

    呃呃,不能直接看mdn文档吗? RegExp.prototype.exec()

    或者标准文档也行 https://tc39.es/ecma262/#sec-regexp.prototype.exec

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3906

    回帖

    3826

    积分

    管理员

    积分
    3826

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-10-25 15:57:10 | 显示全部楼层
    哥哥发成悬赏贴了

    这个网站挺不错的,在线测试正则 https://regex101.com/
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3906

    回帖

    3826

    积分

    管理员

    积分
    3826

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-10-25 16:01:39 | 显示全部楼层
    脚本体验师001 发表于 2022-10-25 13:47
    兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入

    这玩意让我设计应该是这 ...

    哥哥这都快成人工智能了
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2023-11-2 17:37
  • 签到天数: 275 天

    [LV.8]以坛为家I

    114

    主题

    452

    回帖

    973

    积分

    荣誉开发者

    积分
    973

    荣誉开发者油中2周年卓越贡献生态建设者

    发表于 2022-10-25 16:57:25 | 显示全部楼层
    脚本体验师001 发表于 2022-10-25 13:47
    兄弟,你的所有烦恼都是源于规则是外族蛮夷制定的,完全和祖宗的中庸之道格格不入

    这玩意让我设计应该是这 ...

    问题来源于还是对正则不熟,可能别的项目恰好用的正则写法和我常用的不一致。但是又想保持代码的风格一致。所以就会遇到一些问题。
    接脚本定制
    I frequently record, because want to leave something.
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2023-11-2 17:37
  • 签到天数: 275 天

    [LV.8]以坛为家I

    114

    主题

    452

    回帖

    973

    积分

    荣誉开发者

    积分
    973

    荣誉开发者油中2周年卓越贡献生态建设者

    发表于 2022-10-25 16:58:52 | 显示全部楼层
    王一之 发表于 2022-10-25 15:57
    哥哥发成悬赏贴了

    这个网站挺不错的,在线测试正则 https://regex101.com/

    嘿嘿,悬赏贴交流也不错。本来自己就是想听下大佬们的思路
    接脚本定制
    I frequently record, because want to leave something.
    回复

    使用道具 举报

    发表回复

    本版积分规则

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