正则表达式RegExp类型

正则表达式RegExp类型


一、语法
  • var box = new RegExp (“参数一”); //参数一,必选*
  • var box = new RegExp (“参数一”,“标记”); //标记,可选,i:不区分大小写,g:全局模式,m:多行模式。不同的匹配,得出的验证结果不一样
  • var box = / pattern / flags; //pattern:任意简单或者复杂的正则表达式,flags:标记
二、实例属性
  • g:global,表示全局模式,添加此修饰符表示设置了全局模式;
  • i:ignorecase,设置i表示不区分大小写;
  • m:multiline,多行搜索模式;
  • source:正则表达式的字符串表示形式,以字面量形式来表示;
  • lastIndex:搜索下一个匹配项字符的起始位置,从0开始计算。
三、RegExp实例方法
  • test()方法:在字符串中查找是否与指定正则表达式相匹配,返回布尔值。匹配,返回true;不匹配,返回false。
var pattern=/ javascript / ig; //文本中是否包含 javascript
var string="this is javascript";                   document.write(pattern.test(string));//文本中有javascript,正则表达式与文本匹配,返回true
  • exec()方法:在字符串中查找指定字符串。查找成功,返回包含该字符串信息的数组;查找不成功,返回null。
var pattern=/ javascript / ig;
var string="this is javascript";
document.write(pattern.exec(string)+"<br />");                //返回javascript,因为正则表达式中规定的只有/javascript/,但它返回的结果是数组
document.write(typeof pattern.exec(string)+"<br />");    //用typeof检测类型返回的是Object类型,数组属于Object类型

在返回的数组中,第一项xxx[0]:是与整个模式相匹配的字符串;第二项xxx[1]:与第一个捕获组相匹配的字符串;第三项xxx[2]:与第二个捕获组相匹配的字符串。以此类推

多次调用exec()方法时,全局状态与非全局状态的区别
  • 如果模式在一个非全局状态下,那么每一次调用exec()都会从头开始检索,始终返回第一个字符或者第一组字符.
  • 说明在非全局状态下,始终都是从头开始,发现与正则表达式相匹配的字符串就会返回结果,不会继续往下查找。
var pattern=/.at/;   
var string="cat,bat,sat,fat";
var matches=pattern.exec(string);

document.write(matches.index+"<br />");       // 0
document.write(matches[0]+"<br />");          // cat
document.write(matches+"<br />");             // cat
document.write(pattern.lastIndex+"<br />");   // 0

matches2=pattern.exec(string);     //第二次调用exec()
document.write(matches2.index+"<br />");      // 0
document.write(matches2[0]+"<br />");         // cat
document.write(matches2+"<br />");            // cat
document.write(pattern.lastIndex+"<br />");   // 0
  • 如果模式在一个全局状态下,每一次调用exec()会在当前字符串中继续查找新匹配项,遍历整个字符串。
var pattern=/.at/g;
var string="cat,bat,sat,fat";
var matches=pattern.exec(string);

document.write(matches.index+"<br />");         // 0 ,匹配项的第一个字符在文本中的位置
document.write(matches[0]+"<br />");            // cat , 符合正则表达式返回的数组第一项
document.write(matches+"<br />");               // cat , 符合正则表达式返回的数组
document.write(pattern.lastIndex+"<br />");     // 3 ,搜索下一个匹配项字符的起始位置,从0开始计算

matches2=pattern.exec(string);                 // 第二次调用exec()
document.write(matches2.index+"<br />");       // 4 ,匹配项的第一个字符在文本中的位置
document.write(matches2[0]+"<br />");          // bat
document.write(matches2+"<br />");             // bat
document.write(pattern.lastIndex+"<br />");    // 8 ,搜索下一个匹配项字符的起始位置,从0开始计算
四、元字符
  • 正则表达式由两种字符组成:
  • 原义文本字符:字符串类型
  • 元字符
  • 元字符时在正则表达式中有特殊含义的非字母字符
量词
字符含义
.任意字符
*出现0次、1次或者多次
+出现1次或者多次
出现0次或者1次
{n}出现n次
{n,m}出现n至m次
范围类
字符含义
[a-z]从a-z的任意字符,也包含a,z本身
[A-Z]从A-Z的任意字符,也包含A,Z本身
[0-9]从0-9的任意数字,也包含0,9本身
[a-zA-Z0-9]从a-zA-Z0-9的任意字符
预定义类
字符含义
\d数字字符
\D非数字字符
\s空白符
\S非空白符
\w单词字符(字母、数字、下划线)
\W非空白符
匹配边界的字符
字符含义
^此符号在中括号内表示“非XXX”,如果在中括号外则表示开头
$表示结束、结尾
\b表示字符边界
\B表示非字符边界
分组
  • 使用“()”可以达到分组的功能,使量词作用于分组,而不是紧挨着它的字符
    • 表达式:/abc{3}/ 返回的结果为:abcccc,只是紧挨着量词的字符c被应用
    • 表达式:/(abc){3}/返回的结果为:abcabcabc,整个字符串都被应用
  • 使用“ | ”表示“或”
"ByronsperByrcasper".replace(/Btr(on|ca)sper/g,"x");
//返回的结果为:xx,表示字符串中含有on或者ca的都被替换成x
贪婪模式:尽可能多的匹配
var pattern=/\d{3,6}/;
var string="123456789";
document.write(string.replace(pattern,"X"));
//返回的结果为:X789,
//根据正则表达式的定义,匹配字符串中3至6个字符,贪婪模式选择取最大值更多的匹配,1-6都被替换
非贪婪模式:尽可能少的匹配,也就是说,一组字符串中,前面有匹配成功的,那么久不回再向后搜索匹配项。
  • 在量词后加上“ ? ”表示非贪婪模式
var pattern=/\d{3,6}?/;
var string="123456789";
document.write(string.replace(pattern,"X"));
//返回结果:X456789,
//只匹配到最小值,当3匹配成功后,就不会再往后搜索匹配项,所以到3为止
RegExp.$1………9 用于存储捕获组的构造函数属性
var string="this is 'javascript'";
var pattern=/'(.*)'/;
document.write(string.replace(pattern,"<strong>$1</strong>"));
//()圆括号内的捕获组就是$1,此返回结果将‘javascript’加粗
//不管如何修改捕获组里的内容,结果都会跟随修改而改变,不需要单独再修改
  • 使用捕获组反向引用
var string="2017-07-23";
var pattern=/(\d{4})-(\d{2})-(\d{2})/;
document.write(string.replace(pattern,"$3/$2/$1"));
//返回结果:23/07/2017
//在正则表达式中“(\d{4})”表示$1,“(\d{2})”表示$2,“(\d{2})”表示$3    
  • 忽略捕获组
    • 不希望捕获某些分组,只需要在分组内加上“ ?: ”
var string="2017-07-23";
var pattern=/(\d{4})-(\d{2})-(?:\d{2})/;
document.write(string.replace(pattern,"$3/$2/$1")); 
//返回的结果为 $3/07/2017
//忽略了捕获组$3
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值