`

由正则表达式html或xml标签配对说起【括号编组和正负向预查】

阅读更多
    经常会查找xml或HTML标签里的内容,如果着急用,可以使用下面的正则和方式查找:
使用正则表达式: reg = /<div>([\s\S]*)</div>/ig
    /**
     * 
     * @param {type} str
     * @param {type} tag
     * @returns {array}或null 标签和内容数组
     */
    function tag(str,tagName){
        //正则表达式 <div>([\s\S]*)</div>
        var exp = '<'+tagName+'>([\\s\\S]*)<\/'+tagName+'>';
        console.log(exp);
        var reg = new RegExp(exp,'ig');
        var arr = str.match(reg);
        return arr;
    }
    

/**

只返回标签内容或null
**/
    function tagText(str,tagName){
        var exp = '<'+tagName+'>([\\s\\S]*)<\/'+tagName+'>';
        console.log(exp);
        var reg = new RegExp(exp,'ig');
        var arr = str.match(reg);
        if(arr!=null){
            return RegExp.$1;
        }
        return null;
    }

    var str = "<html><body><div>测试div \n</div><body><html>";
    
    var arr = tag(str,'div');
    console.log(arr[0]); 
    
    var text = tagText(str,'div');
    console.log(text);




输出结果

Chrome 34.0.1847 (Windows 7) LOG: '<div>([\s\S]*)</div>'

Chrome 34.0.1847 (Windows 7) LOG: '<div>测试div 
</div>'

Chrome 34.0.1847 (Windows 7) LOG: '<div>([\s\S]*)</div>'

Chrome 34.0.1847 (Windows 7) LOG: '测试div 
'



      两个函数的区别:RegExp.$1;

      这两个函数使用了正则表的式的括号进行分组匹配,很方便,而且节省了大量代码。



正则表达式的括号分组功能,有四种写法
1、(pattern)
2、(?:pattern)
3、(?=pattern)
4、(?!pattern)


我们使用的是第一种方式进行匹配的,这种写法与没有括号的写法功能基本上是一样的
如:
var reg=/[\S]+ [\S]+/ig
和
var reg = /([\S]+) [\S]+/ig;

 var str = 'Windows 95 是个比较老的系统。';
 var arr = str.match(reg);
 console.log('匹配结果:'+arr[0]);
 console.log('捕获分组:'+RegExp.$1);

输出为:
Chrome 34.0.1847 (Windows 7) LOG: '匹配结果:Windows 95'

Chrome 34.0.1847 (Windows 7) LOG: '捕获分组:Windows'



括号的用途在于,模式匹配上以后,可以提取括号分组里的内容。如从匹配的
'Windows 95'提取'Windows',括号括起来后就可以用RegExp.$1提取括号里的
内容,如果匹配多个,可以用RegExp.$1...$99提取。

([\S]+)只是产生了一个有趣的副产品,导致匹配的内容被捕获供今后使用。
2、3、4种写法全部丢弃了副产品。

2、(?:pattern)意思是丢弃副产品,括号里匹配的内容不再存储和使用。

var str = 'Windows 95 是个比较老的系统。';
   
   var reg = /(?:[\S]+) [\S]+/ig; 
    
   var arr = str.match(reg);
   console.log('匹配结果:'+arr[0]);
   console.log('捕获分组:'+RegExp.$1);

Chrome 34.0.1847 (Windows 7) LOG: '匹配结果:Windows 95'

Chrome 34.0.1847 (Windows 7) LOG: '捕获分组:'


分析:
副产品直接丢弃

3、(?=pattern)
分三步操作
1、找到和正则表达式完全匹配的内容。2、捕获括号前面的内容。3、丢弃括号里的副产品。

 var str = 'Windows95和Windows98是比较老的系统。Windows2000是新系统!';
   
 var reg = /Windows(?=98|95)/ig;
     
   var arr = str.match(reg);
   for(var i=0;i<arr.length;i++){
       console.log('匹配结果'+i+':'+arr[i]);  
   }
   console.log('捕获分组:'+RegExp.$1); 
 
Chrome 34.0.1847 (Windows 7) LOG: '匹配结果1:Windows'

Chrome 34.0.1847 (Windows 7) LOG: '匹配结果2:Windows'

Chrome 34.0.1847 (Windows 7) LOG: '捕获分组:'


分析:
1、找到Windows95和Windows98
2、捕获两个Windows
3、丢弃括号里的副产品98和95


4、(?!pattern)负向预查
1、找到和正则表达式括号外的表达式完全匹配的内容。2、捕获括号前面的内容。3、丢弃括号里的副产品。

var str = 'Windows95和Windows98是比较老的系统。Windows2000是新系统!';
   
 var reg = /Windows(?!98|95)/ig; 
     
   var arr = str.match(reg);
   for(var i=0;i<arr.length;i++){ 
       console.log('匹配结果'+i+':'+arr[i]);  
   }
   console.log('捕获分组:'+RegExp.$1); 

Chrome 34.0.1847 (Windows 7) LOG: '匹配结果0:Windows'

Chrome 34.0.1847 (Windows 7) LOG: '捕获分组:'


分析:
1、找到Windows2000
2、捕获1个Windows
3、丢弃括号里的副产品2000


另一个负向预查的例子
//取得script里的网址"http://www.baidu.com"

 var str = '<script src="http://www.baidu.com"><script>';
        var reg = /(?!src=)"[\S]*"/; 
        var match = str.match(reg);
        console.log(match[0]);
输出:
"http://www.baidu.com" 





分享到:
评论

相关推荐

    Java使用正则表达式提取XML节点内容的方法示例

    正则表达式是指一个模式串,它由一些特殊的符号和字符组成,用于描述一个字符串的模式。Java中提供了对正则表达式的支持,使得开发者可以使用正则表达式来匹配和提取字符串中的内容。 二、XML节点内容提取方法 在...

    正则表达式+xml

    正则表达式(Regular Expression)和XML(eXtensible Markup Language)是IT领域中两种重要的技术。正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和验证字符串模式。XML则是一种用于存储和交换结构化...

    JavaScript正则表达式匹配 div style标签

    当与`&lt;div&gt;`或`&lt;style&gt;`标签的开始和结束相对应时,这些正则表达式将匹配整个标签及其内部内容。 需要注意的是,这种方法是不完美的,特别是当标签内含有其他标签时,容易出现匹配错误。比如,如果`&lt;div&gt;`标签中...

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    XML正则表达式 工具

    在XML文档中,有时我们需要通过正则表达式来查找、提取或验证特定的标签、属性值或者内容。理解正则表达式的基本语法和特性对于处理XML数据至关重要。 正则表达式30分钟入门教程.doc可能涵盖了以下关键点: 1. **...

    正则表达式转换工具

    - 学习高级特性:如分组、后向引用、正向预查等,增强表达能力。 - 实践应用:通过实际项目,不断实践和积累经验。 - 工具支持:利用在线正则表达式测试网站,如Regex101,进行实时调试和学习。 综上所述,"正则...

    正则表达式在数据库查询中的应用

    ### 正则表达式在数据库查询中的应用 #### 引言 在数据库管理与应用程序开发中,查询数据是一项常见的任务。传统的SQL查询虽然强大,但在处理复杂查询时可能存在一定的局限性,尤其是涉及到文本数据的模式匹配时。...

    vb正则表达式实例(正则表达式测试程序)

    这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用程序。下面将详细探讨正则表达式的基本概念、在VB.NET中的应用以及如何使用它们进行文本匹配。 1. 正则表达式基础 ...

    pb 使用正则表达式源码pbregexp

    标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...

    正则表达式(Deelx版)|正则表达式(Deelx版)支持库

    正则表达式(Deelx版)是一种强大的文本处理工具,它允许程序员和用户通过预定义的模式来匹配、查找、替换或者分析字符串。Deelx版是专门为提高正则表达式性能和功能而设计的一个支持库,适用于各种编程语言和应用场景...

    java正则表达式过滤html标签

    java正则表达式过滤html标签 java正则表达式过滤html标签是指使用java语言中的正则表达式来过滤html标签的操作。HtmlRegexpUtil这个工具类提供了多种过滤html标签的方法,包括过滤所有以"开头以"&gt;"结尾的标签、找出...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    VC、VC++,MFC 正则表达式类库

    正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则表达式处理模块。这个库通常包含一系列的类和函数,允许程序员编写符合特定模式...

    C语言正则表达式库

    C语言正则表达式库是用于在C编程环境中处理和匹配正则表达式的软件库。这个库名为PCRE(Perl Compatible Regular Expressions),正如其名,它与Perl语言中的正则表达式语法高度兼容,提供了丰富的功能和强大的匹配...

    正则表达式大全 - 收集的最常用正则表达式

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...

    正则表达式大全.docx

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊字符(称为“元字符”)和普通字符组成,能够灵活地定义要查找的模式。以下是一些常见的正则表达式模式及其用途: 1. ...

    易语言正则表达式文本替换

    例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...

    正则表达式生成工具,正则表达式生成工具

    正则表达式生成工具,如"The Regulator",就是辅助开发者或用户创建、测试和优化正则表达式的软件。 正则表达式生成工具的主要功能包括: 1. **模式构建**:提供图形化界面或者交互式输入,帮助用户构建复杂的正则...

    正则表达式必知必会v_1.0.pdf

    正则表达式的语法比较容易理解,但学习正则表达式的主要困难在于如何灵活运用这些规则来达到查找和替换的目的。 匹配单个字符 在正则表达式中,可以使用句点(.)来匹配任意单个字符。句点在正则表达式中被称为元...

    xml需求文档及正则表达式介绍

    在IT行业中,XML(eXtensible Markup Language)和正则表达式是两个非常重要的概念,广泛应用于数据处理和文本匹配。本篇文章将深入探讨这两个主题,并结合它们在实际应用中的作用。 首先,XML是一种标记语言,设计...

Global site tag (gtag.js) - Google Analytics