V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
supman
V2EX  ›  问与答

求助下 正则表达式 伸个手

  •  
  •   supman · 2015-10-10 06:36:58 +08:00 · 2374 次点击
    这是一个创建于 3362 天前的主题,其中的信息可能已经有所发展或是发生改变。

    <h2 class="a-text-normal">匹配我!</h2>

    想问下 怎么匹配标签对里的文字呢?

    21 条回复    2015-10-10 20:15:43 +08:00
    supman
        1
    supman  
    OP
       2015-10-10 07:15:16 +08:00 via iPad
    网页里面好多 h2 标签对 但是只匹配这个 class 的
    freedomSky
        2
    freedomSky  
       2015-10-10 07:22:32 +08:00 via iPhone
    <h2[^>]*class="[^"]*a-text-normal[^>]*>\([^<]*\)<
    freedomSky
        3
    freedomSky  
       2015-10-10 07:23:17 +08:00 via iPhone
    大概这么个意思,手机打的,没测试
    vmebeh
        4
    vmebeh  
       2015-10-10 08:12:27 +08:00   ❤️ 1
    <h2\sclass="a-text-normal">(.*)</h2>
    linshuizhaoying
        5
    linshuizhaoying  
       2015-10-10 08:30:24 +08:00
    以前写过很渣的一个对 ajax 进行转换的东东, Bug 满天飞,但是最后勉强能用,我抄一段给你,你可以看下
    function check_single(single){
    /*
    * Code by:Qian
    * 描述:
    * 第一遍粗略正则
    * 将<div id=xxx class="xxx" xxx="xxx">AAAAAA... </div>
    * 匹配成
    * $1= div id=xxx class="xxx" xxx="xxx"
    * $2 = AAAAAA...
    * $3 = div
    */
    var select_Regx = /\<\//g;
    var regx;
    //准备处理的数据
    var pre_Data = single;
    //判断是闭合标签还是单标签
    var n = pre_Data.match(select_Regx) || [];
    if(n.length == 1){
    //闭合
    regx=/\<(.*)*\>(.*)*(\<\/(.*)*\>)/i;
    }else{
    //单标签 img a 这类
    regx=/\<(.*)*\>(.*)*(\<\/(.*)*\>)*/i;
    }
    var result=regx.exec(pre_Data);

    one = result[1];
    two = result[2];

    if(two){//如果有 content 这个值
    Content_stack.push(two);
    }
    //从$1 中提取标签,不取$1 作为标签是因为 img a 这些没有闭合标签

    var regy=/(\b(.)*\b)\s/i;
    var t = regy.exec(result[1]);

    if(t){
    three = result[1].substring(0,result[1].search('\\s'));
    RegExp_One();
    return getResult();
    }else{
    return getzero();
    }
    // alert(one);
    // alert(two);
    // alert(three);
    }

    这是 github 地址 https://github.com/linshuizhaoying/AjaxRegExp
    我知道我水平渣=-=请不要打击我,尽量挑能夸的夸,谢谢
    CheungKe
        6
    CheungKe  
       2015-10-10 09:24:29 +08:00
    我也来个

    <img src="xxx" ... id="xxx">

    要求匹配出 id 的值

    注: id 可能为空
    popok
        7
    popok  
       2015-10-10 09:35:31 +08:00   ❤️ 1
    @vmebeh
    要么改成这样:<h2\sclass="a-text-normal">(.*?)</h2>
    要么:<h2\sclass="a-text-normal">([^<]*)</h2>
    funsunz
        8
    funsunz  
       2015-10-10 09:50:46 +08:00
    <\s*h2[^>]+>([^<]+)<\/h2\s*>

    测试:

    ```javascript
    var patt = /<\s*h2[^>]+>([^<]+)<\/h2\s*>/;

    var result = patt.exec('<h2 class="a-text-normal">匹配我!</h2>');
    alert(result[1]);
    ```

    http://jsfiddle.net/mneLoa5v/
    Biwood
        9
    Biwood  
       2015-10-10 09:53:07 +08:00
    @CheungKe <img[^/>]*id=['"](.*)['"][^/>]*?/>
    Biwood
        10
    Biwood  
       2015-10-10 09:54:31 +08:00
    @CheungKe 不好意思,刚刚写错了一点,应该是:<img[^/>]*id=['"](.*)['"][^/>]*?[/>]
    funsunz
        11
    funsunz  
       2015-10-10 09:55:33 +08:00
    <\s*h2[^>]+class\s*=\s*"a\-text\-normal"[^>]*>([^<]+)<\/h2\s*>

    ```javascript

    var patt = /<\s*h2[^>]+class\s*=\s*"a\-text\-normal"[^>]*>([^<]+)<\/h2\s*>/;

    var result1 = patt.exec('<h2 class="a-text-normal">匹配我!</h2>');
    alert(result1[1]);

    var result2 = patt.exec('<h2 class="a-text-normal">test content</h2>');
    alert(result2[1]);

    ```
    http://jsfiddle.net/mneLoa5v/1/
    supman
        12
    supman  
    OP
       2015-10-10 10:55:44 +08:00
    @freedomSky
    @vmebeh
    @linshuizhaoying
    @CheungKe
    @popok
    @funsunz
    @Biwood
    @funsunz


    谢谢 谢谢你们啦!!!!么~
    vmebeh
        13
    vmebeh  
       2015-10-10 11:14:12 +08:00
    @popok 非贪婪模式更好,谢谢补充
    CheungKe
        14
    CheungKe  
       2015-10-10 11:45:21 +08:00
    <img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]+(?:id\s*=\s*['"]([^'"]+)['"])[^>]*>

    我目前在用这个,但是 id 一定要存在。

    如果 <img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]+(?:id\s*=\s*['"]([^'"]+)['"]) ? [^>]*>

    如果加上 ? ,能获取到 group 但是值是 null 。好象是 repeat group 的问题,不是了解
    luoluoluo
        15
    luoluoluo  
       2015-10-10 12:05:16 +08:00   ❤️ 1
    You can't parse [X]HTML with regex.

    http://stackoverflow.com/a/1732454/1099230
    CheungKe
        16
    CheungKe  
       2015-10-10 13:15:37 +08:00
    @luoluoluo 有一段文字,像
    我们都是<img src="xx" id="xx">好学生
    只有文字和图片组合而成的字符串,应该怎么顺序切分出来放到数组里面,需要提取 img id
    Exin
        17
    Exin  
       2015-10-10 13:35:55 +08:00 via iPhone
    @luoluoluo 弱弱问下有没有什么好的 parse HTML 的轮子
    longaiwp
        19
    longaiwp  
       2015-10-10 19:09:26 +08:00
    最简单的方案不是 html 解析器?
    CheungKe
        20
    CheungKe  
       2015-10-10 20:14:17 +08:00
    @luoluoluo 用 dom 解析,如何得到以下两个数组

    ["我们", "<img src="xx" id="image_id1">","都是", "<img src="xx" id="image_id2">", "好学生"]
    ["image_id1", "image_id2"]
    CheungKe
        21
    CheungKe  
       2015-10-10 20:15:43 +08:00
    原始数据:

    我们<img src="xx" id="image_id1">都是<img src="xx" id="image_id2">好学生
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1112 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:49 · PVG 02:49 · LAX 10:49 · JFK 13:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.