`

正则表达式之 获取匹配与非获取匹配

    博客分类:
  • JS
 
阅读更多

   最近公司没什么任务,所以学习了一下JS的正则表达式,收获颇多。

举出其中的几个典型表达式分享下。


 正向预查 : (?=pattern)

    正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

 

下面是win7 +IE9 演示的例子

eg:1 

      红色下划线标识的地方 验证此表达式不获取匹配和不消耗字符。

      不获取匹配:图中方框显示的区域  匹配成功后结果只有"windows " ,而没有”2000

      不消耗字符 : 第三个例子和第四个例子可以看出(?=pattern)表达式

 在匹配"windows "后的"2000"完成后    是从"2"开始的而不是从"s"处开始匹配。


                        
 

 负向预查 :  (?!pattern
        负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始  。                     

 

(?:pattern)
     匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

 

eg:2

             图中列举了 (?=pattern)  与  (?:pattern) 的例子做比较

 

得出结论:(?:pattern)表达式 虽然也是非获取匹配但它是一个消耗字符的匹配。


                           
 

 

(pattern)
      匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在Visual Basic Scripting Edition 中则使用 $0$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。

 

eg:3  添加i(忽略大小写) g(全局查找),

      在replace 函数的表达式中 添加 ig  对结果没有影响

      在match   函数的表达式中 添加g    则不会获取匹配

      在exec   函数的表达式中 添加 ig  对结果没有影响

    
                      
                     
 

 

  ?  问号的用法

     当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

 
                        
 
 
 

  • 大小: 11.4 KB
  • 大小: 9.3 KB
  • 大小: 12.9 KB
  • 大小: 18.3 KB
  • 大小: 6.4 KB
分享到:
评论

相关推荐

    kettle 根据系统时间加正则表达式动态匹配获取多个文本文件

    kettle 根据系统时间加正则表达式动态匹配获取多个文本文件

    易语言正则表达式类匹配中文

    5. **取匹配文本**:这会返回整个匹配的文本,即原始文本中与正则表达式完全匹配的部分。 6. **取子匹配文本**:除了整个匹配外,正则表达式可能还包含捕获组,这些是用括号定义的子模式。`取子匹配文本`可以获取...

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    PB实现的正则表达式

    4. 处理结果:检查匹配结果,获取匹配的子串,或进行替换等操作。 需要注意的是,由于PowerBuilder 11.5年代较久,其支持的正则表达式功能可能相对较弱,对于现代的复杂正则表达式语法可能不完全兼容。在使用时,...

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

    正则表达式是一种强大的文本匹配工具,它可以简洁地表示复杂的搜索模式。通过使用正则表达式,可以简化上述例子中的SQL查询语句。例如,同样的查询可以使用如下语句完成: ```sql SELECT * FROM Tablel WHERE name ...

    pb 使用正则表达式源码pbregexp

    5. **捕获组**:提取匹配的子串,特别是对于包含括号的正则表达式,可以获取多个匹配部分。 6. **修饰符**:如全局匹配(g)使匹配不局限于第一个出现的位置,忽略大小写(i)等。 “pbregexp”组件可能提供了相应...

    Lucene 使用正则表达式

    Lucene的核心特性之一就是支持复杂的查询语言,其中包括正则表达式。 #### 正则表达式在Lucene中的应用 正则表达式是一种强大的文本模式匹配工具,广泛应用于字符串搜索和替换等场景。在Lucene中,可以通过`regexQuery...

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

    为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...

    Jmeter正则表达式提取器

    《Jmeter正则表达式提取器的深度解析与应用》 在软件测试和性能测试领域,Apache JMeter 是一款广泛使用的开源工具,尤其在接口测试和Web应用性能测试中扮演着重要角色。其中,正则表达式提取器是Jmeter中的一个...

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

    然而,对于MFC开发者来说,使用MFC内建的正则表达式类库往往更加方便,因为它们与MFC的其他组件更紧密地集成在一起。 在MFC中,正则表达式的实现可能包括以下类: 1. `CRegEx`:这是MFC中的核心正则表达式类,用于...

    C语言正则表达式库

    PCRE库提供了丰富的API接口,包括编译正则表达式、执行匹配、获取匹配结果等。 PCRE库的特性包括: 1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛...

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

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

    正则表达式入门与提高---整理版_VBa_正则式_

    正则表达式是一种强大的文本处理工具,用于在字符串中...而这份"正则表达式入门与提高---整理版"文档将是你学习正则表达式的好帮手,它涵盖了基础概念、常用模式以及实例解析,是深入理解和运用正则表达式的好资源。

    使用Java正则表达式分析处理日志

    3. **执行匹配**:调用`Matcher`对象的`find()`方法来查找匹配项,或者`matches()`方法检查整个输入是否与正则表达式完全匹配。 4. **处理匹配结果**:使用`group(int group)`方法获取匹配的子串,或者`start(int ...

    Java正则表达式 Java 正则表达式

    - 分组通过圆括号`()`实现,分组编号由左括号的数量决定,用于获取匹配的子串。 9. **数量词的修饰** - Greedy(贪婪)数量词:尽可能多的匹配字符。 - Reluctant(勉强)数量词:尽可能少的匹配字符。 - ...

    VBScript 正则表达式详解

    Global 属性负责设置或返回一个 Boolean 值,指明模式是匹配整个字符串中所有与之相符的地方还是只匹配第一次出现的地方。该属性的值可以是 True 或 False,如果为 True,则对整个字符串进行查找;否则,只匹配第一...

    测试正则表达式软件

    - `group(int group)`:获取匹配的分组,`group(0)`为整个匹配的子串,`group(1), group(2),...`为捕获的分组。 测试正则表达式的软件可以帮助开发者在编写和调试正则表达式时提供实时反馈,确保它们按预期工作。...

    nodejs+字符串的模式匹配+正则表达式+判断获取字符串的某些需求

    本文将详细介绍如何在JavaScript中使用正则表达式进行字符串的模式匹配、提取以及替换。 #### 二、基本概念 正则表达式是一种由字符和特殊符号组成的语言,用于描述字符串的模式。在JavaScript中,正则表达式的创建...

    正则表达式(日期校验)

    - **语法结构**:正则表达式是由一系列字符和特殊符号组成的模式串,用于匹配字符串中的特定模式。 - **常见符号**: - `.`:匹配任意单个字符。 - `*`:匹配前面的子表达式零次或多次。 - `+`:匹配前面的子...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    正则表达式(Regular Expression)是一种模式匹配语言,通过预定义的规则来识别和操作字符串。它由一系列特殊字符和组合构成,可以用来检查一个字符串是否符合特定的格式,或者从中提取所需的信息。例如,你可以用...

Global site tag (gtag.js) - Google Analytics