求助下 正则表达式 伸个手 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
supman
V2EX    问与答

求助下 正则表达式 伸个手

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

    <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     Solana     2658 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 03:15 PVG 11:15 LAX 20:15 JFK 23:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86