`
pcajax
  • 浏览: 2162365 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正则表达式小括号的多义性

 
阅读更多

小括号在正则表达式这有以下意义

  • 限定量词作用的范围
  • 限定多选结构的范围
  • 为反向引用捕获文本
  • 分组捕获
  • 只分组不捕获
  • 前瞻

 

一、限定量词作用的范围

1
2
3
var reg1 = /(Matz)?/; // 0或1个Matz
var reg2 = /(Matz)+/; // 1个以上Matz
var reg3 = /(Matz)*/; // 0或多个Matz

  

二、限定多选结构的范围

1
2
3
4
var reg = /(Matz|Eich)/
reg.test('Matz') // => true
reg.test('Eich') // => true
reg.test('John') // => false

  

三、为反向引用捕获文本

1
2
3
4
5
6
var reg = /(boy)\1/ // 相当于 /boyboy/
reg.test('boy') // => false
reg.test('boyboy') // => true
 
var reg /(boy)(girl)\1\2/
reg.test('boygirlboygirl') // => true

  

四、分组捕获

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var reg1 = /(\d{3}) (\d{3})/
var str = '111 222'
str.replace(reg1, '$2 $1') // => '222 111' , 注意这里的$2,$1,存放了匹配的字符串
 
var reg2 = /(\d{3})(\d{4})(\d{4})/
var mobile = '13522722724'
reg2.test(mobile)
RegExp.$1 // => 135
RegExp.$2 // => 2272
RegExp.$3 // => 2724
 
var reg3 = /(\d{3})(\d{4})(\d{4})/
var mobile = '13522722724'
mobile.replace(reg3, '$1 $2 $3') // => '135 2272 2724'

  

五、只分组不捕获(和 "?:" 一起)

1
2
3
var reg = /(?:\d+)/
reg.test('13522722724')
RegExp.$1 // => '' 不存储匹配的元素

较长的正则表达式中,反向引用会降低匹配速度,性能降低,不需要反向引用时应使用分组不捕获。

 

六、前瞻(lookahead,和 "?=" 一起)

它告诉正则表达式向前看一些字符但不移动位置,前瞻不匹配任何字符只匹配文本中的特定位置。

1
2
3
4
5
var reg = /(John) (?=Resig)/
reg.test('John') // => false
reg.test('John Backus') // => false
reg.test('John Reisg') // => true
RegExp.$1 // => 'John',注意这里不是 "John Resig"
分享到:
评论

相关推荐

    pb 使用正则表达式源码pbregexp

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

    java_zhengze.rar_正则表达式_正则表达式 java

    本资料"java_zhengze.rar"提供了对Java正则表达式的详细讲解,包括基本概念、元字符、预定义字符类以及各种匹配操作,对于Java开发者来说是一份非常实用的学习资源。 首先,我们来了解一下正则表达式的基石——元...

    非常方便的正则表达式调试器,自己需替换的内容作为示例匹配正则表达式和目标内容,Run出结果

    5. **分组**:使用圆括号 `( )` 将正则表达式分成不同的部分,可以捕获匹配的子串,也可以应用于量词或其他操作。 6. **断言**:如 ^ 表示字符串的开始,$ 表示字符串的结束,\b 表示单词边界,而 \B 表示非单词边界...

    正则表达式检查小工具

    这款工具对于开发者来说确实是个好帮手,尤其是对于经常处理文本和数据格式的人员,它能快速检查正则表达式的正确性,避免在实际应用中出现错误。无论是初学者还是经验丰富的开发者,都可以从中受益。

    RegexTest正则表达式测试工具

    这对于检查正则表达式的正确性非常有帮助。 2. **分组与捕获**:RegexTest支持正则表达式中的分组操作,可以清晰地展示捕获的各个子串,帮助理解如何通过括号定义和使用分组。 3. **替换功能**:用户可以设置替换...

    30分钟入门正则表达式

    在实际使用时,要根据具体需求选择合适的语法结构,避免过度复杂的正则表达式,以提高代码可读性和维护性。同时,了解如何在不同的编程语言和环境中使用正则表达式也是很重要的,例如在JavaScript中,可以使用`match...

    正则表达式(有详细的解释和案例)

    正则表达式,简称为正则或regex,是...在"正则表达式.doc"和"常用的正则表达式.doc"中,你将找到更多详细的解释和实际应用案例,这些资源将帮助你更好地理解和运用正则表达式,解决你在项目中遇到的各种文本处理问题。

    正则表达式验证工具Java

    这对于开发和调试过程中快速检验正则表达式的正确性非常有帮助。为了运行这个工具,首先需要在您的计算机上正确安装Java Development Kit (JDK),并且配置好相应的环境变量,使得系统能够找到Java的执行路径。 "run...

    java正则表达式检查

    这个“java正则表达式检查”小工具专门用于测试正则表达式的有效性,帮助开发者验证自己的正则表达式是否能够按照预期工作。下面将详细介绍Java中的正则表达式以及如何使用它们进行文本处理。 1. 正则表达式基础 -...

    个人 正则表达式 学习小结

    ### 正则表达式基础学习小结 正则表达式是一种强大的文本匹配工具,用于在字符串中查找或替换模式。本文将对正则表达式的几个关键概念进行详细解析,包括元字符、字符类、量词以及边界匹配等,旨在帮助初学者理解并...

    正则表达式的一个Demo

    正则表达式(Regular ...在实际应用中,还需要不断实践和学习,因为正则表达式的强大之处在于其灵活性和复杂性。通过组合这些元素,你可以创建出能处理各种文本模式的正则表达式,从而提高文本处理的效率和准确性。

    js正则表达式(例子).rar

    JavaScript中的正则表达式...综上所述,JavaScript的正则表达式是编程中不可或缺的一部分,熟练掌握正则表达式能极大提高文本处理的效率和灵活性。通过实践和理解不同例子,你可以更好地运用这些工具来处理字符串数据。

    C#正则表达式语法

    7. **旗标**:在C#中,可以通过旗标参数调整正则表达式的匹配行为,例如`RegexOptions.Multiline`(多行模式)和`RegexOptions.IgnoreCase`(忽略大小写)。 8. **正则表达式构造函数**:在C#中,可以使用`System....

    正则表达式之道

    正则表达式(Regular Expression,简称regex)是一种模式匹配工具,能够用来检查一个字符串是否符合某种预定义的规则。它的强大之处在于通过简单的字符组合,可以实现复杂的文本匹配。在Java中,正则表达式主要通过`...

    正则表达式30分钟入门教程

    ### 正则表达式30分钟入门教程知识...通过以上详细解释,我们可以看到正则表达式不仅是一种强大的工具,而且具有丰富的功能和灵活性。初学者通过逐步学习和实践,可以逐渐掌握其使用技巧,并在实际开发中发挥重要作用。

    Javascript正则表达式教程

    在JavaScript中,正则表达式通常使用NFA(非确定性有限自动机)解释引擎来处理,这种引擎允许更灵活的匹配行为。 正则表达式的起源可以追溯到20世纪50年代的神经网络研究,由数学家Stephen Kleene提出,随后在Ken ...

    正则表达式用法 小工具

    正则表达式是一种强大的文本处理工具...通过这个小工具,开发者可以快速地测试和调试正则表达式,提高编写正则表达式时的效率和准确性。对于C#程序员来说,掌握正则表达式是提高代码质量、提升开发效率的重要技能之一。

Global site tag (gtag.js) - Google Analytics