`
记录成长
  • 浏览: 26137 次
  • 性别: Icon_minigender_2
  • 来自: 湖北孝感
社区版块
存档分类
最新评论

正则表达式(转)通俗易懂

阅读更多

JS中match、replace方法中使用正则表达式 收藏

正则表达式由来已久,查找替换功能非常强大,但模板难记复杂。 JavaScript中String对象的match()、replace()这2个方法都要使用正则表达式的模板。当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串。

正则表达式的模板对象
//标准写法 regexp = new RegExp(pattern[, flag]); pattern: 
模板的用法是关键,也是本章的主要内容。 flag: "i"(ignore)、"g"(global)、"m"(multiline)的组合 i-忽略大小写,g-反复检索,m-多行检索flag中没有g时,返回字符串,有g时返回字符串数组
var reg = new RegExp("飞雪","g"); 
var str = "风雨送春归飞雪迎春到,飞雪连天向天横"; 
var xx = str.(str.match(reg)); //xx的结果: xx[0]="飞雪" alert(xx); // xx[1]="飞雪"
//常用写法 regexp = new RegExp(/pattern /[flag]); //去掉引号逗号改用“/”
ar reg = new RegExp(/飞雪/g); 
var str = "风雨送春归飞雪迎春到,飞雪连天向天横"; 
var xx = str.(str.match(reg)); //xx的结果: xx[0]="飞雪" 
alert(xx); // xx[1]="飞雪"
//省略写法 
string.match(/pattern/flag);整个模板对象省略,让JavaScript自动生成
//var reg = new RegExp(/飞雪/g); 
var str = "风雨送春归飞雪迎春到,飞雪连天向天横"; 
var xx = str.(str.match(/飞雪/g)); //xx的结果: xx[0]="飞雪"
 alert(xx); // xx[1]="飞雪"
模板的语法(即正规表现)
//字符串相匹配(包括单个字符)【字符串】 
reg = new RegExp(/abc/ig); //匹配字符串"abc",多次,大小写不计
reg = new RegExp(/abc/ig);
 xx = "123ABCxyzbcaLMNAbC".match(reg); //xx为: ABC,AbC 注;bca不符合
//多个字符串中任意一个相匹配【|】 
reg = new RegExp(/abc|xyz/ig); 
//字符串abc或xyz之间用|分割 注: 【|】不适用于下面的[...]内容
reg = new RegExp(/abc|xyz/ig); 
xx = "123ABCxyzbcaLMNAbC".match(reg); //xx为: ABC,xyz,AbC
//字符串中任意一个字符相匹配【[...],[.-.]】
reg1 = new RegExp(/[abc]/ig); //匹配任意一个字符用[...] 
reg2 = new RegExp(/[m-p]/ig); //连续字符串可用减号[.-.] 
reg3 = new RegExp(/[0-9]/g); //判断是否包含数字 
reg4 = new RegExp(/[a-z]/ig); //判断是否包含英文字母 
//注: 【-】只是用于[...]中
reg1 = new RegExp(/[abc]/ig); 
xx = "123ABCopqbcaLMNAbC".match(reg1); //xx为: A,B,C,b,c,a,A,b,C 
reg2 = new RegExp(/[m-p]/ig); 
yy = "123ABCopqbcaLMNAbC".match(reg2); //yy为: o,p,M,N
//字符串中任意一个字符不包含匹配【[^...]】 
reg1 = new RegExp(/[^abc]/ig); //匹配任意一个字符都不被包含用^ 
reg2 = new RegExp(/[^m-p]/ig); //不包含mnop的任一字符
 reg3 = new RegExp(/[^0-9]/g); //判断是否不包含数字 
reg4 = new RegExp(/[^a-z]/ig); //判断是否不包含英文字母 
注: 【^】是在[...]的里面,不是后面所说的【^】在[...]外面
reg1 = new RegExp(/[^abc]/ig); 
xx = "123ABCopqbcaLMN".match(reg1); //xx为: 1,2,3,o,p,q,L,M,N 
reg3 = new RegExp(/[^0-9]/g); 
yy = "123opqLMN".match(reg3); //yy为: o,p,q,L,M,N
//多个重复字符相匹配【{m,n}】 
说明: {m,n}表示从m到n次重复字符相匹配,m,n为大于等于0的整数。{m}和{m,}都是正确的,{ ,n}语法不错,但永远不能匹配 
reg1 = new RegExp(/abc{2}/ig); //等价于“/abcc/ig”
 reg2 = new RegExp(/abc{1,2}/ig); //等价于“/abc|abcc/ig” 
reg3 = new RegExp(/abc{0,2}/ig); //等价于“/ab|abc|abcc/ig”
 reg4 = new RegExp(/abc{0,}/ig); //匹配ab后面跟任意个c 
reg5 = new RegExp(/abc{1,}/ig); //匹配ab后面跟一个以上的c 
注: 【{m,n}】不适用于[...]中
reg1 = new RegExp(/abc{2}/ig); 
xx = "abcABCCabccc".match(reg1); //xx为: ABCC,abcc 
reg3 = new RegExp(/abc{0,2}/ig); 
yy = "abxABCCabccc".match(reg3); //yy为: ab,ABC,abcc 
zz = "abA Ba bA b".match(/a {0,}b/ig); //匹配ab之间任意空格。zz为: ab,A B,a b,A b 
ww = "aa1bb22cc321dd9876".match(/[0-9]{2}/g); //匹配2位数字。ww为:22,32,98,76
//子表达式即字符串的一部分相匹配【(...)】 
说明: 对字符串的一部分进行操作,可以用()括起来 reg1 = new RegExp(/abc{2}/ig); //等价于“/abcc/ig”,c被重复了2遍 
reg2 = new RegExp(/abc{2}/ig); //等价于“/abcbc/ig”,bc被重复了2遍
reg1 = new RegExp(/abc{2}/ig); xx = "abcABCbccc".match(reg1); //xx为: null 
reg2 = new RegExp(/abc{2}/ig); yy = "abcABCbccc".match(reg2); //yy为: ABCbc
通配符
//匹配单个任意字符(不包括\n)【.】
xx = "at act ant amount".match(/a.t/gi); //a与t之间有1个字符。xx=act,ant 
xx = "at act ant amount".match(/a....t/gi); //a与t之间有4个字符。xx=amount
//任意匹配字符或字符串【*】等价于{0,}
“*”星号前面至少必须有一个字符,任意匹配时可以用“.”代替字符 “*”星号前面不能用限定符{...}及其简写形式
xx = "at act ant amount".match(/a*t/gi); //t前面任意个a。xx=at,t,t,t 
xx = "at act ant amount".match(/a.*t/gi); //a与t之间任意个字符。xx=at,act,ant,amount xx = "at act ant amount".match(gi); //语法出错(*前面不能有限定符)
xx = "at act ant amount".match(/.*ou/gi); //ou前面任意个字符。xx=at act ant amou 
xx = "at act ant amount".match(/.*/gi); //与原字符串相同。xx=at act ant amount
//子表达式的任意匹配【?】等价于{0,1}
“?”问号前面至少必须有一个字符,任意匹配时可以用“.”代替字符 “?”问号前面没有用(...)将子表达式括起来,“?”相当于“*”,而不是“.” “?”问号的主要作用是对(...){.,.}操作
xx = "at act,ant amount".match(/a?t/gi); //t前面有0个或1个a。xx=at,t,t,t 
xx = "at act,ant amount".match(/?t/gi); //语法出错(*前面无字符)
xx = "at act,ant amount".match(/a{1}?/gi); //对“a{1}”的结果匹配。xx=a,a,a,a
//子表达式的1次以上匹配【+】等价于{1,}
“+”加号前面至少必须有一个字符,也可以用“.”代替字符 “+”加号前面没有用(...)将子表达式括起来,“+”相当于“?”或“*”,而不是“.”
xx = "at act,ant amount".match(/a+t/gi); //t前面有1个以上的a。xx=at 
xx = "at act,ant amount".match(/+t/gi); //语法出错(*前面无字符) 
xx = "at act,ant amount".match(/a{1}+/gi); //对“a{1}”的结果匹配。xx=a,a,a,a
//通酡符小结
“.”匹配的字符是任意的,与符号前面的字符没有关系 “?”匹配的字符或字符串与其前面字符或子表达式有关 “.”匹配一个字符,而与“*”、“+”和“?”结合后,能匹配0个或多个 “?”前面没有(...)子表达式时,匹配的是前一个字符 “?”前面有(...)子表达式时,匹配的是前一个子表达式 “?”前面有{m,n}限定符时,匹配的个数就是{m,n}指定的个数
xx = "at act,ant amount".match(/a.t/gi); //xx=act,ant 
xx = "at act,ant amount".match(/a?t/gi); //xx=at,,a,,t,,a,,t,,a,,,,,t, 
xx = "at act,ant amount".match(/a*t/gi); //xx=at,t,t,t 
xx = "atat fatt,gatAT amount".match(/at?/gi); //x=at,at,at,at,AT,a 
xx = "atat fatt,gatAT amount".match(/(at)?/gi); //xx=at,at,,,at,,,,at,AT,,,,,,,, 
xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT
定位符
开始【^】和结束【$】位置如果有\n\r时,要与multiLine配合使用
xx = "I am a student".match(/^s/i); //xx=null 
xx = "I am a student".match(/^i/i); //xx=I 
xx = "I am a \nstudent".match(/^s/i); //xx=null 
xx = "I am a \nstudent".match(/^s/mi); //xx=s 
xx = "I am a student".match(/m$/i); //xx=null 
xx = "I am a student".match(/m$/i); //xx=m 
xx = "I am a\n student".match(/a$/i); //xx=null 
xx = "I am a\n student".match(/a$/mi); //xx=a 
xx = "I am a student".match(/^s/i); //xx=null 
xx = "I am a student".match(/^i/i); //xx=I 
xx = "I am a \nstudent".match(/^s/i); //xx=null 
xx = "I am a student".match(/^i.*t$/i); //xx=I am a student
转义字符
\b 匹配一个【单词边界】(例:回车、换行、空格、逗号)。 \B \b除外
xx = "I am a student".match(/stu\b/i); //xx=null 
xx = "I am a student".match(/\bstu/i); //xx=stu 
xx = "I am a student".match(/ent\b/i); //xx=ent 
xx = "I am a student".match(/ent\B/i); //xx=null 
xx = "我是学生".match(/学生\B/i); //xx=null 
xx = "我是(student)学生".match(/ent\B/i); //xx=ent 
xx = "我是student学生".match(/ent\B/i); //xx=ent
\cA 匹配一个【Ctrl+A】字符。 
\d 匹配一个【数字】。等价于[0-9]。 
\D \D除外 \f 匹配一个【换页符】字符。等价于 \x0c 和 \cL。 
\n 匹配一个【换行符】。等价于 \x0a 和 \cJ。 
\r 匹配一个【回车符】。等价于 \x0a 和 \cJ。 
\s 匹配一个【空白符】。包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。 
\S \D除外 \t 匹配一个【制表符】。等价于 \x09 和 \cI。 
\v 匹配一个【垂直制表符】。等价于\x0b 和 \cK。 
\w 匹配一个【英文数字】。等价于[A-Za-z0-9]。 
\W \w除外 \onnn 匹配一个【8进制数字】 
\xnnn 匹配一个【16进制数字】
(略)
\其它字符(正则表达式使用的符号和单双引号)
\(】【\)】【\[】【\]】【\{】【\}】 【\"】【\'】【\^】【\$】【\\】【\/

分享到:
评论

相关推荐

    正则表达式-通俗易懂

    dataType="Require | Chinese | English | Number | Integer | Double | Email | Url | Phone | Mobile | Currency | Zip | IdCard | QQ | Date | SafeString | Repeat | Compare | Range | Limit | LimitB | Group ...

    通俗易懂的正则表达式

    本教程将通过简单易懂的实例,帮助初学者快速入门正则表达式。 首先,我们需要了解正则表达式的基本构成元素: 1. **字符**:正则表达式可以包含各种基本字符,如字母(a-z, A-Z)、数字(0-9)以及特殊字符如空格...

    精通正则表达式

    3. **可读性**:语言通俗易懂,即使是初学者也能轻松掌握。 4. **扩展性**:介绍了正则表达式的最新发展动态和技术趋势,帮助读者保持技术前沿。 ### 结语 《精通正则表达式》(第三版)是一本值得每位程序员拥有的...

    精通正则表达式英文版

    Friedl 用通俗易懂的语言和丰富的实例,引导读者逐步掌握正则表达式的精髓。 书中的章节可能包括但不限于以下内容: 1. 正则表达式基础:介绍基本的字符类,如字母、数字、特殊字符的转义,以及量词(如*、+、?)...

    正则表达式教程和测试机

    本教程旨在提供一个全面且通俗易懂的正则表达式学习指南,并配备了一个实用的测试工具。 一、正则表达式基本概念 1. 元字符:在正则表达式中,某些字符具有特殊含义,如`.`表示任意字符,`*`表示前面的元素可以...

    正则表达式学习 (很实用的)

    本资料包"正则表达式学习 (很实用的)"旨在提供一个通俗易懂的学习路径,帮助初学者更好地理解和运用正则表达式。 正则表达式的语法由一系列特殊字符和普通字符组成,它们共同构建出一个模式,用于定义我们要匹配...

    精通正则表达式[第3版](带目录)

    带目录,内容通俗易懂

    php正则表达式

    php正则表达式内容简介简单,通俗易懂,适合新手入门,也适合高手作为参考手册

    一刻钟精通正则表达式

    本文旨在用通俗易懂的方式介绍正则表达式的基础知识,帮助你在一刻钟内掌握其基本用法。 首先,了解基本的定位符`^`和`$`。`^`表示字符串的开始,而`$`表示字符串的结束。例如,`^The`匹配以"The"开头的字符串,`of...

    正则表达式——详细讲解平衡组

    慢慢完善吧~(注:这是我2010年写的,现在拿过来,有时间将自己做为读者来看本篇文章,修改有问题的地方,并增加些实例,尽量做到通俗易懂。) 一般正则教程中对平衡组的介绍 如果想要匹配可嵌套的

    正则表达式必知必会-高清带目录

    正则表达式的优秀入门书,篇幅短小,其次语言通俗易懂,非常适合想快速入门的童鞋。

    JavaScript 正则表达式之RegExp属性、方法及应用分析

    RegExp对象(至今为止我看到过的最通俗易懂和深入的正则表达式教程)JavaScript提供了一个RegExp对象来完成有关正则表达式的操作和功能,每一条正则表达式模式对应一个RegExp实例。有两种方式可以创建RegExp对象的...

    java正则表达式

    java正则表达式,方便,简单。通俗易懂,一看就会。

    知乎程序员三大神之一的vczh在大学写的编辑原理里的词法分析,通俗易懂

    正则表达式是一种强大的工具,可以描述一系列字符模式,用于识别和提取特定的记号类型。例如,正则表达式可以用来定义数字、字符串、括号等记号的格式。 正则表达式的四个基本操作包括: 1. **字符匹配**:一个...

    C#入门精讲(10)正则表达式及应用

    1、课程设计循序渐进、讲解细致、通俗易懂、非常适合自主学习?2、教学过程实例丰富、强调技术关键点、并且分析透彻?3、物美价廉:本着知识共享、服务社会宗旨,诣在为更多有需求者提供服务。?此外,提供源代码+答疑+...

    python3.5从零开始学刘宇宙

    本书专门针对Python新手量身定做,涵盖了Python 3 实际开发的重要知识点,内容包括:Python语言的类型和对象、操作符和表达式、编程结构和控制流、函数、序列、多线程、正则表达式、面向对象编程、文件操作、网络...

    python3.5从零开始学

    本书专门针对Python新手量身定做,涵盖了Python 3 实际开发的重要知识点,内容包括:Python语言的类型和对象、操作符和表达式、编程结构和控制流、函数、序列、多线程、正则表达式、面向对象编程、文件操作、网络...

    全的吉大编译课件

    这份资源因其通俗易懂且权威的特点,对于学习者来说尤其宝贵。 首先,让我们深入第二章,了解“词法分析&正则表达式”。词法分析是编译过程的第一步,它将源代码分解成一个个有意义的词汇单元,称为记号。正则...

    《Python 3.5从零开始学》刘宇宙 mobi

    《Python 3.5从零开始学》专门针对Python新手量身定做,涵盖了Python 3 实际开发的重要知识点,内容包括:Python语言的类型和对象、操作符和表达式、编程结构和控制流、函数、序列、多线程、正则表达式、面向对象...

Global site tag (gtag.js) - Google Analytics