鱼C论坛

 找回密码
 立即注册
查看: 2785|回复: 2

[已解决]关于正则的一个小问题

[复制链接]
发表于 2020-3-21 13:06:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请先看正确表达式(以及能扫描到的正确结果)
 var reg=/\.vhk[a-z0-9]{3}\s+{\s+\w+:\s+\-\d+px\s+\-\d+px;\s+}/gm;
                console.log(html.match(reg));

扫描结果:
PS E:\wp> node app10
[
  '.vhk08k {\n  background: -274px -141px;\n}',
  '.vhk6zl {\n  background: -7px -15px;\n}',
  '.vhk0ao {\n  background: -133px -97px;\n}',
  '.vhk9or {\n  background: -330px -141px;\n}',
  '.vhkfln {\n  background: -428px -15px;\n}',
  '.vhkbvu {\n  background: -386px -97px;\n}',
  '.vhk84t {\n  background: -176px -141px;\n}',
  '.vhkvxd {\n  background: -246px -141px;\n}',
  '.vhkqsc {\n  background: -288px -141px;\n}',
  '.vhkjj4 {\n  background: -316px -141px;\n}',
  '.vhk0f1 {\n  background: -316px -97px;\n}'
]
PS E:\wp>

问题一: 如何去掉扫描结果里的  \n
问题二: 感觉正则表达式有些长,所以尝试写短一些,可是会得到NULL的结果

var reg=/\.vhk.+?}/gm;
最佳答案
2020-3-30 12:59:19
1.个人觉得再加一个replace替换掉 \n 就可以吧
我写了一个你可以看看
<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8">
                <title></title>
                <style type="text/css">
                .vhk08k {
                        background: -274px -141px;
                        }
                  .vhk6zl {
                          background: -7px -15px;
                  }
                  .vhk0ao {
                          background: -133px -97px;
                  }
                  .vhk9or {
                          background: -330px -141px;
                  }
                  .vhkfln {
                          background: -428px -15px;
                  }
                  .vhkbvu {
                          background: -386px -97px;
                  }
                  .vhk84t {
                          background: -176px -141px;
                  }
                  .vhkvxd {
                          background: -246px -141px;
                  }
                  .vhkqsc {
                          background: -288px -141px;
                  }
                  .vhkjj4 {
                          background: -316px -141px;
                  }
                  .vhk0f1 {
                          background: -316px -97px;
                  }
                </style>
        </head>
        <body>
                <script type="text/javascript">
                        var html=document.querySelector("html").innerHTML;
                        var reg=/\.vhk[a-z0-9]{3}\s+{\s+\w+:\s+\-\d+px\s+\-\d+px;\s+}/gm;
                        
                        var res=html.match(reg);
                        res.forEach(function(item,index,arr){
                                arr[index]=item.replace(/\n/g,"");
                                console.log(arr[index]);
                        });
                        console.log(res);
                        var reg1=/\.vhk.+?}/gm;
                        console.log(html.match(reg1));
                        
                </script>
        </body>
</html>
2.
reg1是你简化代码的测试,结果是不行的,究其原因是因为.+?匹配不到换行符,所以找不到符合条件的语句,自然就是null了
我去掉所有的换行符之后就可以用你那个简化的来找到你想要的字符串了
但是你要简化必须要先去掉换行符,想匹配换行符就无法简化  so这样已经是最优解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-30 12:59:19 | 显示全部楼层    本楼为最佳答案   
1.个人觉得再加一个replace替换掉 \n 就可以吧
我写了一个你可以看看
<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8">
                <title></title>
                <style type="text/css">
                .vhk08k {
                        background: -274px -141px;
                        }
                  .vhk6zl {
                          background: -7px -15px;
                  }
                  .vhk0ao {
                          background: -133px -97px;
                  }
                  .vhk9or {
                          background: -330px -141px;
                  }
                  .vhkfln {
                          background: -428px -15px;
                  }
                  .vhkbvu {
                          background: -386px -97px;
                  }
                  .vhk84t {
                          background: -176px -141px;
                  }
                  .vhkvxd {
                          background: -246px -141px;
                  }
                  .vhkqsc {
                          background: -288px -141px;
                  }
                  .vhkjj4 {
                          background: -316px -141px;
                  }
                  .vhk0f1 {
                          background: -316px -97px;
                  }
                </style>
        </head>
        <body>
                <script type="text/javascript">
                        var html=document.querySelector("html").innerHTML;
                        var reg=/\.vhk[a-z0-9]{3}\s+{\s+\w+:\s+\-\d+px\s+\-\d+px;\s+}/gm;
                        
                        var res=html.match(reg);
                        res.forEach(function(item,index,arr){
                                arr[index]=item.replace(/\n/g,"");
                                console.log(arr[index]);
                        });
                        console.log(res);
                        var reg1=/\.vhk.+?}/gm;
                        console.log(html.match(reg1));
                        
                </script>
        </body>
</html>
2.
reg1是你简化代码的测试,结果是不行的,究其原因是因为.+?匹配不到换行符,所以找不到符合条件的语句,自然就是null了
我去掉所有的换行符之后就可以用你那个简化的来找到你想要的字符串了
但是你要简化必须要先去掉换行符,想匹配换行符就无法简化  so这样已经是最优解

评分

参与人数 1荣誉 +2 鱼币 +3 贡献 +3 收起 理由
不二如是 + 2 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:53:52 | 显示全部楼层

       可以这样试试.

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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