JavaScript中String对象的match()、replace() 配合正则表达式使用

时间:2022-09-23 18:00:12
正则表达式由来已久,查找替换功能非常强大,但模板难记复杂。 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(/a(bc){2}/ig); //等价于“/abcbc/ig”,bc被重复了2遍
reg1 = new RegExp(/abc{2}/ig); xx = "abcABCbccc".match(reg1); //xx为: null
reg2 = new RegExp(/a(bc){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进制数字】。
(略)
/其它字符(正则表达式使用的符号和单双引号)
【/(】【/)】【/[】【/]】【/{】【/}】 【/"】【/'】【/^】【/$】【//】【//】

JavaScript中String对象的match()、replace() 配合正则表达式使用的更多相关文章

  1. JavaScript中String对象的方法介绍

    1.字符方法 1.1 charAt() 方法,返回字符串中指定位置的字符. var question = "Do you like JavaScript?"; alert(ques ...

  2. Javascript中String对象的的简单学习

    第十一课String对象介绍1:属性    在javascript中可以用单引号,或者双引号括起来的一个字符当作    一个字符对象的实例,所以可以在某个字符串后再加上.去调用String    对象 ...

  3. javascript中string对象方法中的slice、substring、substr的区别联系

    1.slice.substring.snustr均属于String的对象方法,用于截取或提取字符串片段,三者均布破坏原先的字符串,而是以新的字符串返回被提取的部分. <script> va ...

  4. javascript中String 对象slice 和substring 区别

      1.slice(start,stop)和substring(start,stop)  方法都是用于提取字符串中从start开始到stop-1间的字符(因为字符串索引是从0开始).其中 start必 ...

  5. JavaScript中String对象处理HTML标记中文本的方法

    big():创建一个<big></big>标记,将这个字符串的字体变大blink():创建一个<blink></blink>标记,使字符串具有闪烁效果b ...

  6. JavaScript中判断对象类型方法大全1

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  7. JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  8. 转 JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  9. javascript中的对象,原型,原型链和面向对象

    一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...

随机推荐

  1. SpringAOP之静态代理

    一.SpringAOP: ⒈AOP:Aspect Oriented Programming 面向切面编程, 实现的是核心业务和非核心业务之间的的分离,让核心类只做核心业务,代理类只做非核心业务.  ⒉ ...

  2. java多线程系列3-线程同步

    如果一个资源被多个线程同时访问,可能会遭到破坏,这篇文章介绍java线程同步来解决这类问题 引入问题 某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售 ...

  3. Ubuntu 14&period;10 下开机不进入图形化界面

    因为装的是Ubuntu 桌面版,很占资源,所以启动时候不进入图形化界面,肯定会省不少内存 进入  /etc/X11/default-display-manager  sudo nano/etc/X11 ...

  4. DIY Ruby CPU 分析——Part III

    [编者按]作者 Emil Soman,Rubyist,除此之外竟然同时也是艺术家,吉他手,Garden City RubyConf 组织者.本文是 DIY Ruby CPU Profiling 的第二 ...

  5. hdu5573 二叉树找规律,二进制相关

    input T 1<=T<=100 n k 1<=n<=1e9  n<=2^k<=2^60 output 从1走到第k层,下一层的数是上一层的数×2或者×2+1,每 ...

  6. 对scrapy经典框架爬虫原理的理解

    1,spider打开某网页,获取到一个或者多个request,经由scrapy engine传送给调度器schedulerrequest特别多并且速度特别快会在scheduler形成请求队列queue ...

  7. &lbrack;LeetCode&rsqb; Candy Crush 糖果消消乐

    This question is about implementing a basic elimination algorithm for Candy Crush. Given a 2D intege ...

  8. PHP 框架

    LARAVEL/LUMEN,  CI  ,THINKPHP, YII ,SYMFONY YAF, PHALCON ,ICE FRAMEWORK

  9. 【BZOJ 5125】小Q的书架

    Problem Description 小 \(Q\) 有 \(n\) 本书,每本书有一个独一无二的编号,现在它们正零乱地在地上排成了一排. 小 \(Q\) 希望把这一排书分成恰好 \(k\) 段,使 ...

  10. 在java中对数据库进行增删改查

    1.java连接MySql数据库 代码区域: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...