正则表达式(学写笔记)

正则表达式

简介

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
使用正则表达式一般用来:

  • 检测字符串的模式,是否包含需要的内容。做数据验证
  • 可以将正则表达式匹配出的字符串替换成其他的字符。
  • 提取字符串。做网页爬虫时需要用正则匹配标签内的信息。
    正则表达式如果只有精确的匹配作用就没有那么大了.一般正则用来进行模糊匹配.

创建方法

正则表达式支持两种创建方法:

  1. 使用字面量创建。
var reg = /hello world/;

2.使用构造方法创建

var reg = new RegExp(/hello world/);

可接受的参数和属性

正则的参数一般跟在 / 后面.
例如

var reg1 = /today/img;
//这里面的参数g意思是全局匹配,会一直将整个字符串全部进行匹配。

下面是一些常见的参数:

参数作用
g执行全局匹配,如果没有这个参数,正则会在匹配一次以后就会停止。
i匹配时将不区分大小写。
m将识别一些换行符,会将一行的开头结尾进行匹配。
s激活正则对象的dotAll属性(true),可以让 .匹配到任意字符。
y正则对象会以自己的lastIndex属性中记录的下标开始匹配

正则对象属性

属性描述
constructor返回正则表达式原型的函数
global值为Boolean型,如果设置了参数g,就为true
ignoreCase如果了设置了i参数,这个值为true,忽略大小写
lastIndex记录了下次匹配的其实位置配合y参数使用
multiline判断是否设置了m参数,是否进行多行匹配
source保存着正则对象的匹配标准
/today/g
dotAll: false
flags: "g"
global: true
ignoreCase: false
lastIndex: 0
multiline: false
source: "today"
sticky: false
unicode: false
__proto__: Objec

正则匹配的规则

范围表示:

规则作用
^表示以什么开头.如 /^abc/ 就代表以abc开头的字符匹配规则
表示以什么结尾.如 /abc$/ 就代表以abc结尾的字符匹配规则
[abc]匹配括号内的任意一个字符
[0-9]简写形式,匹配0到9之间的任意一个数字
[a-z]匹配小写字母a到z之间的任意一个字母
[A-Z]匹配大写字母A-Z之间的任意一个大写的字母
[A-z]匹配从大写A到小写z之间任意一个字母
[any | any |any]符合中括号中任意一个字符

如果没有量词数量限制 [ ] 中括号就代表一个,就是只要匹配其中任意一个就算匹配成功

元字符(一种范围简写的形式)

元字符描述
\w匹配单词字符,范围包括0-9 、a-z、A-Z,下划线_字符
\W匹配非单词字符,与\w相反
\d匹配数字
\D匹配非数字的字符
\s匹配空的字符
\S匹配非空的字符
匹配除了换行和行结束符的字符
\b匹配作为边界非完整的字符,从左往右
\B匹配非全边界一般作为结尾的字符,从右往左
\n查找换行符
 var str = 'abduo $ # 12\na\tbcv 234_3\r@qq.com 010-343433'
       console.log('\d', str.match(/\d/g));
        console.log('\D', str.match(/\D/g));
        console.log('\w', str.match(/\w/g));
        console.log('\W', str.match(/\W/g));
        console.log('\s', str.match(/\s/g));
        console.log('\S', str.match(/\S/g));
        console.log('.', str.match(/./g));
        console.log('\.', str.match(/\./g));
        console.log('a|b', str.match(/a|b/g));
 // 关于\b 和 \B
var str="Visiv Runooob"; 
var patt1=/\Booob/gi;
var patt2=/\brun/gi;
// 打印结果为
ooob
Run

运行结果
量词

量词描述
n+出现0次或者出现1次
n*出现0次或者多次
n?出现0次或者一次
{n}出现了n次
{x,y}出现x到y次
?=n任何后面紧接着n的字符。匹配的是n前面的
?!n后面没有紧接着跟着n的字符
 var reg1 = /a/;      
 var reg2 = /^a$/; 
 var reg3 = /^a*$/; 
 var reg4 = /^a+$/; 
 var reg5 = /^a?$/; 
 var reg5 = /^a{3}$/; 

正则表达式对象常用的方法

exec:检测字符串中正则表达式的匹配。如果匹配到了值,就会返回匹配值(一个数组对象里面记录了一些匹配数据)。如果没有匹配到会返回null。
语法:RegExpObject.exec(string)

 var str = 'hello world hello world';
 var reg = /hello/g;
 console.log(reg.exec(str));
 console.log(reg.exec(str));

exec每次只执行一次,每次执行都会根据正则对象里面保存的lastIndex的值来进行下一次开始的位置。这个值不会因为更改字符串对象而改变。
test:检测一个字符串是否符合正则对象的规则
语法:RegExpObject.test(string)

  var reg = /[abc]/;
  var str = 'abc';
  console.log(reg.test(str));//true

字符串关于正则的方法

search检索与正则表达式相匹配的值,返回找到的字符串的下标,没有找到会返回-1.。本身就有检索字符串的功能。

var str="Visit Runoob!"; 
var n=str.search("Runoob");
var n=str.search("/Runoob/");
//输出结果为6

match检索所有与正则表达式相匹配的值,返回由匹配值组成的数组。如果正则对象有g参数,会查找到多个值,否则只找到一次。一次时返回也是数组,里面包含了有关这次查找的信息。没有找到返回null。

var str = 'abcdefghjabcde';
str.match(/a*/);//只匹配一次
str.match(/a*/g);//会进行多次匹配

replace:第一个参数可以为正则对象或者字符串(匹配规则),第二个参数可以是字符串或者一个函数。将依据第一个匹配规则匹配到的字符替换成第二个参数的字符。如果第二个为函数,会将匹配到的字符作为参数传递进去。第二个参数必须得到一个值,函数需要在内部返回一个值。
用这个做过字符串转换驼峰法。该方法返回改变后的字符串,但是原字符串没有被改变。

  var str = 'aabcefg';
        var rel = str.replace(/a*/g, function (str) {
            return str.toUpperCase();
        });
        console.log(rel);// AAbcefg
        console.log(str);// aabcefg
        

表单input标签支持正则的属性

pattern:当给input添加该属性以后,表单在提交时会自动依据属性值进行匹配,如果不符合条件,会弹出浏览器自定义的警告信息。但是这个属性不是支持所有类型的input。目前来说适用于:text、search、url、telephone、email以及password。
书写格式:

 pattern="/^1[3|4|5|7|8]\d{9}$/"

关于正则提取值$

上面的方法已经可以返回匹配到的值,但是还有一些特殊的提取正则的值,这些方法并不是正式的,不建议用到正式的产品中。

  • 在replace方法中第二个参数如果是一个函数。$ 字符具有特定的含义。它代表从模式匹配得到的字符串将用于替换。
name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
// John Doe
  • 在test方法检测一个字符串时,此处的RegExp不能省略掉,否则会出现错误,且$的值只能找到第九位。
// 使用括号将正则分割成
 var reg = /(\w+)@([\w|-]+)\.(\w+)(\.\w+)?/;
 var str = '123123@qq.com';
        if (reg2.test(str)) {
            console.log(RegExp.$1);
            console.log(RegExp.$2);
            console.log(RegExp.$3);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值