`
hellonihao
  • 浏览: 17936 次
社区版块
存档分类
最新评论

js正则表达式 选择、分组和引用

阅读更多
JavaScript的正则表达式支持布尔操作,除了作为 选择的“布尔或”操作之外,正则表达式还支持分组和引用 。其实选择、分组和引用的作用分别为:指定选择项、对子表达式分组和引用 前一子表达式的特殊字符。

正则表达式的选择:

所谓选择即在多个条件里面选择一个,比如说卖水果的大爷说送你个水果,你可以选择“梨”,“苹果”,“西瓜”中的任何一个。当然你会选择西瓜,呵呵。

字符”|”用于分隔供选择的字符 ,例如/西瓜|梨|苹果/匹配的是“西瓜”,“梨”,或者是“苹果”。同样我要 是想根据昨天讲过的字符类去匹配一些规则,比如我想匹配3个数字,或者是4个小写字母就可以用模式/\d{3}|[a-z]{4}/,呵呵,咋样?即了解 了选择,又用上了字符类,同时呢我们还用到了重复,这几天讲的东西都复习了一遍,哈哈。

    选择项是从左到右考虑,直到发现了匹配项。如果左边的选择项匹配,则忽略右边的匹配项,即使它产生更好的匹配。

其实上面的话是很好理解的,还是拿大爷送你水果的例子,大爷第一次拿出西瓜,问你要不要?如果你选择了西瓜,大爷自然不会再问你要不要苹果或者梨了。而如果你不要西瓜,那么大爷会再拿出个梨,问你要不要?就是这个道理。

正则表达式的分组:

我们可以通过使用小括号来对正则表达式进行分组 。所谓分组,其实可以理解为合作伙伴,且是无商业利益的,合作伙伴之间的关系是一荣俱荣,一损俱损。也就是说把括号内的东西当成一个小组,一个单元。分组就就是正则表达式中的子表达式,这个我们下面的引用会讲到。

一个单元就说明后面的重复规则,与前后小组间的“或”关系,都是以小组为单位的。小组里的东西是统一处理的。
//如下模式即可以匹配java,也可以匹配javascript
//因为?表示的是出现0次或1次,如果一次不出现那么就匹配的是java
//否则匹配的就是javascript
var pattern = /java(script)?/ ;

//下面代码返回的是abcdcd,cd,ef,,efnull
var patt1= new RegExp( "(ab|cd)+|(ef)" , "g" ) ;

do
{
result= patt1.exec ( "abcdcdef" ) ;
document.write ( result) ;
}
while ( result!= null )

在JavaScript1.5中,无须创建带编码的引用就可以将正则表达式中的项目进行组合。它不是以括号对项目进行分组,而是以”(?:”和”)”进行的分组,不过此分组不能生成引用 (下面介绍的就是引用)。

正则表达式的引用:

在正则表达式中,其实括号的另一个作用是在完整的模式中定义子模式 。当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配的部分。

例如:我想要检索的条件是3个字母加上4个数字,但是真正对我有用的是那4个数字。则可以使用如下模式进行匹配
//3个字母加4个数字的匹配模式
var pattern = /[a-z]{3}\d{4}/ ;

但是我咋能选择匹配我的这个模式的字符串中的数字部分呢?这是一个问题。(呃,在这里强调一下,怎么找出符合这个模式的字符串不属于本篇日志内容。这里还是先继续挖坑。嗯。)这时候我们就需要把那个数字部分也变成分组,既然是分组,那么我们就可以给组一个编号嘛。呵呵。
//3个字母加4个数字的匹配模式
var pattern = /[a-z]{3}(\d{4})/ ;

带括号的子表达 式的另一个用途是允许我们在同一正则表达式的后部引用前面的子表达式 (可下引出正题来了)。这是通过在字符”\”后加一位或多位数字实现的。例如,\1引用 提第一个带括号的子表达式,\3则表示引用的是第三个带括号的子表达式。

由于 子表达式可以被嵌套在别的子表达式中,所以它的位置是被计数的左括号的位置。
//下例中的([Ss]cript)就被指定为\2
var pattern = /([Jj]ava([Sscript)?)\sis\s(fun\w*)/ ;

对正则表达式中前一子表达式的引用 所指的并不是那个子表达式的模式,而是与那个模式相匹配的文本 ,这个是一定不要弄混的。因为你想,你真正关心的也不是模式,模式只是找出你想要的东西的一个工具而已。

根据上面的规定,我就可以实证 条约束,即一个字符串各个单独的部分包含的是完全相同的字符。例如,我下面的正则表达式匹配的就是位于单引号或者双引号之内的0个或多个字符。如果我想要前后引号是匹配的(都是单引号或都是双引号)就可以用上引用。
//不会管前后引号是否相同 下面代码输出false
var pattern = /["'][^"']*["']/ ;
document.write ( pattern .test ( "The 'best\" things in life are free" ) ) ;

//保证前后引号相同 下面代码输出true,false
var pattern = /(["'])[^"']*\1/ ;

document.write ( pattern.test ( "The 'best' things in life are free" ) ) ;
document.write ( pattern.test ( "The 'best\" things in life are free" ) ) ;



正则表达式的选择、分组和引用运算符:
字符 含义
| 选择。匹配的是该符号左边的子表达式或右边的子表达式,其实就是布尔“或”
(…) 组合。将几个项目组合为一个单元,这个单元可由*、+、?和|等符号使用,而且 还可以记住和这个组合匹配的字符以供此后的引用使用
(?:…) JavaScript 1.5中可以使用其对正则表达式进行分组,但是只是分组。把项目组合到一个单元,但是不记忆与该组匹配的字符
\n 和第n个分组第一次匹配的字符相匹配。组是括号 中的子表达式(可嵌套,以左半括号开始数,从1开始数,一到数下去 ),以(?:…)分组的组不进行编码

原生javascript
jquery焦点图
分享到:
评论

相关推荐

    JavaScript正则表达式迷你书

    第3章讨论了正则表达式中括号的作用,包括分组、分支结构、分组引用和反向引用等。分组可以通过括号“()”实现,用来提取匹配的数据,分支结构则用来匹配多个选项之一。分组引用可以引用之前已经匹配的分组,反向...

    javascript正则表达式综合练习

    JavaScript正则表达式是编程语言中的一个重要组成部分,用于处理文本模式匹配和字符串操作。这篇博客“javascript正则表达式综合练习”可能是一个实践教程或示例集合,旨在帮助开发者提升在JavaScript中使用正则...

    正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar

    9. **在不同编程语言中的实现**:不同的编程语言对正则表达式的支持程度和实现可能略有差异,例如JavaScript、Python、Java、Perl等都有自己的正则表达式引擎和语法特性。 正则表达式的强大在于其灵活性和可组合性...

    正则表达式调试工具

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索替换和文本处理等领域。正则表达式调试工具是开发人员用来测试和优化这些模式的重要辅助工具。本文将...

    javaScript 正则表达式详解

    选择、分组和引用序列是指在正则表达式中使用竖线 | 选择左边或右边的子表达式。括号 () 可以将多个项组合为一个单元,并捕获匹配的字符串。 指定匹配位置模式 指定匹配位置模式是指 ^ 匹配字符串的起点,$ 匹配...

    通过正则表达式生成数据

    2. **利用编程语言**:大多数编程语言如Python、Java、JavaScript等都内置了正则表达式的支持,并提供了方法来生成符合正则表达式的随机字符串。例如,Python的`re`模块配合`random.choice`或`random.choices`可以...

    javascript正则表达式学习笔记

    这篇学习笔记将深入探讨JavaScript正则表达式的概念、语法和实际应用。 一、正则表达式基础 1. 创建正则表达式: - 字面量表示法:`/pattern/flags` - 构造函数:`new RegExp('pattern', 'flags')` 2. 常见的...

    Java JS正则表达式大全

    **Java与JavaScript正则表达式详解** 在编程领域,正则表达式(Regular Expression)是一种强大的文本处理工具,尤其在处理字符串匹配、查找、替换和提取等任务时,它的功能尤为强大。Java和JavaScript虽然源自不同...

    精通正则表达式中文版英文版_中文版为扫描版

    在正则表达式的世界里,基础概念包括字符类(如匹配任何数字[\d])、量词(匹配0次或多次*,1次或多次+,至少n次{n}等)、分组与捕获(使用括号()来定义一个子模式)、预查(用^符号否定预查,如[^abc]匹配非abc的...

    正则表达式基础正则表达式基础

    不同的编程语言或工具可能采用不同的正则表达式引擎,如Perl兼容正则表达式(PCRE)、JavaScript的正则表达式等,它们在语法细节和功能上可能存在差异。 五、进阶技巧 1. 非贪婪匹配:默认情况下,量词是贪婪的,会...

    javascript正则表达式详解

    了解和掌握JavaScript正则表达式,对于提高JavaScript编程能力具有重要意义。 正则表达式的核心部分包括字符匹配和位置匹配。字符匹配涉及具体字符和字符类别的匹配,例如匹配特定的单个字符、字母数字字符、空白...

    JS正则表达式大全 (正则表达式用于简化js中的代码)

    ### JS正则表达式大全 #### 一、正则表达式概述 正则表达式是一种在文本中查找或替换字符串的强大工具,在JavaScript中被广泛应用于数据验证、字符串搜索与替换等场景。通过学习并掌握正则表达式的使用方法,可以...

    详解JavaScript正则表达式之分组匹配及反向引用_.docx

    本文将深入探讨JavaScript正则表达式的分组匹配及反向引用功能,并通过具体的示例来帮助读者更好地理解和应用这些特性。 #### 二、正则表达式基础 在正式讨论分组匹配与反向引用之前,先简要回顾一下正则表达式的...

    正则表达式综合练习

    10. **编程语言支持**:大多数编程语言都内置了正则表达式支持,如Java(Test.java中的例子可能涉及Java的`Pattern`和`Matcher`类),Python的`re`模块,JavaScript的`match`、`replace`等方法。 11. **优化技巧**...

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

    在"js正则表达式(例子).htm"中,可能包含了各种JavaScript正则表达式的实例,例如邮箱验证、手机号码格式检查、URL解析等。通过这些实例,你可以学习如何构建复杂的正则表达式来满足不同的需求,并了解它们在实际...

    正则表达式.rar || 正则表达式.rar

    2. JavaScript:JavaScript的全局对象`RegExp`提供了正则表达式功能,`test()`、`exec()`、`match()`、`replace()`等方法广泛应用于前端开发。 3. Java:Java中的`java.util.regex`包提供正则表达式支持,`Pattern`...

    精通正则表达式&正则表达式经典实例

    通过《精通正则表达式》这本书,你可以深入理解正则表达式的内部机制,学习高级特性如回溯、后向引用和递归等。而《正则表达式经典实例》则提供了大量实用示例,帮助你在实践中巩固所学,解决实际问题。 学习并掌握...

    正则表达式教程合集(各种语言的,超全)

    本教程合集涵盖了多种编程语言中的正则表达式规则和应用,包括JavaScript、VB、.NET、Perl等。 在JavaScript中,正则表达式广泛应用于字符串操作,如`match()`、`search()`、`replace()`和`split()`方法。...

Global site tag (gtag.js) - Google Analytics