wp231957 发表于 2020-3-21 13:06:35

关于正则的一个小问题

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

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

问题一: 如何去掉扫描结果里的\n
问题二: 感觉正则表达式有些长,所以尝试写短一些,可是会得到NULL的结果
var reg=/\.vhk.+?}/gm;

542624047 发表于 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{3}\s+{\s+\w+:\s+\-\d+px\s+\-\d+px;\s+}/gm;
                       
                        var res=html.match(reg);
                        res.forEach(function(item,index,arr){
                                arr=item.replace(/\n/g,"");
                                console.log(arr);
                        });
                        console.log(res);
                        var reg1=/\.vhk.+?}/gm;
                        console.log(html.match(reg1));
                       
                </script>
        </body>
</html>

2.
reg1是你简化代码的测试,结果是不行的,究其原因是因为.+?匹配不到换行符,所以找不到符合条件的语句,自然就是null了
我去掉所有的换行符之后就可以用你那个简化的来找到你想要的字符串了
但是你要简化必须要先去掉换行符,想匹配换行符就无法简化so这样已经是最优解

kaohsing 发表于 2020-4-29 17:53:52


       可以这样试试.

页: [1]
查看完整版本: 关于正则的一个小问题