正则表达式的定义,验证,原子,(数量,位置,选择)修饰符,模式单元,先行断言,模式修饰符,字符串的正则方法等的详细介绍

1.定义正则表达式
①.直接量方式      var reg = /hello/;
console.log(typeof reg);//object
②.RegExp()函数      var reg1 = RegExp(“hello”);
③.RegExp构造函数      var reg2 = new RegExp(“hello”);
2.正则表达式如何去匹配验证字符串
①.test():只要字符串中有满足正则的条件,就可以匹配。成功返回true,失败返回false。
console.log(reg.test(‘helloworld’)); //true
其中reg是正则表达式,是验证helloword的。
②.exec():匹配字符串中第一次满足正则条件的部分。如果能匹配成功返回数组,不能匹配成功返回 null。
console.log(reg.exec(‘helloworld’));结果如图所示:

数组的第一个成员0:是从字符串中匹配到内容,匹配第一次出现的。
index: 匹配到的内容在字符串中位置。
input:拿去比较的字符串,exec()括号中的内容。
3.原子
3.1字符直接量
一个字母、一个数字、一个标点符号、一个汉字、一个空白符(\n\f\t\v)都是一个原子。一个原子只能匹配一个字符。
console.log(/a/.exec(‘apple’));
[“a”, index: 0, input: “apple”, groups: undefined]
3.2字符类
字符类可以匹配一类字符, 一个原子匹配一个字符。
[abz] 匹配一个字符,这个字符可以是a,可以是b,也可以z。
[a-z] 匹配26个字母中的任意一个
[a-zA-Z] 匹配小写26个字母,大写26个字母中的任意一个
[0-9ea] 匹配 0 ~ 9、e、a
[^abz] 匹配除了a、b、z以外的所有字符 匹配一个
[^a-zA-Z] 除了字母
\w 匹配任意一个 数字、大小写字母、下划线 [0-9a-zA-Z_]
\W 匹配任意一个 除了数字、大小写字母、下划线 以外的字符 [^0-9a-zA-Z_]
\d 匹配任意一个数字 [0-9]
\D 匹配任意一个除了数字以外的字符 [^0-9]
\s 匹配任意一个空白符 [\n\v\t\f ] (空白符:\n,\v,\t,\f,空格)
\S 匹配任意除了空白符以外的字符 [^\n\v\t\f ]
3.3特殊字符类
.匹配除了换行符之外所有的字符 [^\n] , 其中\n是换行符,匹配不到。
匹配在正则里面具有特殊意义的字符,用反斜杠转义。比如匹配 . ,要写成 \. 。
4.数量修饰符
数量修饰,表示前面的原子连续出现的次数。修饰的是紧挨着的原子(数量修饰符写在原子的后面)。/a{3}/ == /aaa/      /ab{3}/ == /abbb/
前面的原子至少出现2次;它会尽可能多的匹配(贪婪匹配)。
console.log(/\w{2,}/.exec(‘helloworld’));//helloworld
console.log(/\w{2,}/.exec(’+a+’));//null
前面的原子出现3-5次
console.log(/\w{3,5}/.exec(’+helloworld+’));//hello
console.log(/\w{3,5}/.exec(’+app+{}’));//app
总结:
{n} 匹配前面原子的数量 n次
{n,} 匹配前面原子的数量n次以及以上
{n,m} 匹配前面原子的数量n次到m次
特殊的数量修饰符
?数量修饰符,前面的原子出现 0次或1次 {0,1}
console.log(/\w?/.exec(’+0+’));//""      结果是空,因为是出现0次或者1次,第一个不出现就直接按0次算了。
console.log(/\w?/.exec(‘app+’));//a      结果是a,因为a在最前面。
“+” 前面的原子出现 1次或多次 {1,}
console.log(/a+/.exec(’++’));//null
console.log(/a+/.exec(’+aaaa+’));//aaaa
“* “ 前面的原子出现0次或多次 {0,}
console.log(/\w*/.exec(’++’));//”" 0次
console.log(/\w*/.exec(‘app+’));//app 多次
总结:
? 前面原子的数量 0次或 1次 {0,1}
“+” 前面原子的数量1次或多次 {1,}
“* “ 前面原子的数量0次或多次 {0,}
贪婪匹配:
定义正则,匹配 img标签。在数量修饰符的后面加?可以阻止贪婪匹配。
var reg = /<img.+?>/;
?的作用,尽可能少的匹配。
{2,5}?//匹配两次 {3,}?//匹配三次
5.位置修饰符
5.1单词边界
单词之间会有空格、标点符号、换行符号、字符串的开始和结束隔开。
\b 单词边界,\b写在单词最前面,匹配是以某单词开始的。\b写在单词最后面,匹配是以某单词结束的。\b写在单词最前面和最后面,匹配是以某单词开始并且以某单词结束的。
console.log(/\bapple/.exec(‘apple orange’));
[“apple”, index: 0, input: “apple orange”, groups: undefined]
console.log(/\bapple/.exec(‘applee orange’));
[“apple”, index: 0, input: “applee orange”, groups: undefined]
console.log(/\bapple/.exec(‘appl orange’));null
\B 除了单词边界,\B写在单词最前面,匹配不是以某单词开始的。\B写在单词最后面,匹配不是以某单词结束的。\B写在单词最前面和最后面,匹配不是以某单词开始并且不是以某单词结束的。
5.2字符串边界
\A 等同于 ^ 字符串开始
\Z 等同于 $ 字符串结束
^写在前面是匹配以这个单词开始的,$写在后面是匹配以这个单词结束的。
6.选择修饰符
/a|b/ 匹配a或b
/abc|def/ 匹配abc或def
/ab(c|d)ef/ 匹配abcef或abdef
7.模式单元及其作用
/(hello){3}/ (hello)是模式单元。
作用:
①.提高优先级
②.把多个原子当做一个整体 /(hello){3}/ == /hellohellohello/
③.暂存内存:把模式单元中的内容单独捕获; regExp.exec()返回的数组会包含模式单元匹配到内容;
var reg4 = /(a)p(pl)e/;
console.log(reg4.exec(‘apple’));
[“apple”, “a”, “pl”, index: 0, input: “apple”, groups: undefined]
如果仅仅想改变优先级或者仅仅想把多个原子当做一个整体,不想暂存内存,可以用(?: )
var reg2 = /ab(?:c|d)ef/;
console.log(reg2.exec(‘abdef’));
[“abdef”, index: 0, input: “abdef”, groups: undefined]
捕获组:可以给每个模式单元取个名字 (?<名字>http|https),exec返回的数组中的groups属性可以得到模式单元的内容,可以从groups中获取内容,如果不写捕获组,也可以按照索引进行获取内容。
var pattern = /(?<protocol>http|https)/;
console.log(pattern.exec(‘http’));

④.反向引用
反向引用:用在replace替换的时候,才能进行反向引用; 可以引用模式单元中匹配到内容。$1引用第一个模式单元的内容,$2引用第二个模式单元的内容,以此类推。
var res = str.replace(/”([^"]+)"/g, ‘“$1”’); 其中$1引用的是([^"]+)中匹配到内容。
8.先行断言
先行断言本质是位置修饰。
需求:匹配 apple 要求apple在 orange的前面
var reg = /apple(?=orange)/; //正向先行断言 只能放置原子的后面
需求:匹配 apple 要求apple 的后面不能是 orange
var reg1 = /apple(?!orange)/; //负向先行断言 只能放置原子的后面
需求:匹配 apple 要求apple的前面必须是orange
var reg2 = /(?<=orange)apple/; // 正向后行断言 修饰后面的原子
需求:匹配 apple 要求apple的前面不是orange
var reg3 = /(?<!orange)apple/; // 负向后行断言 修饰后面的原子
9.模式修饰符
模式修饰符(修饰的整个正则表达式)
\i 大小写不敏感
\m 多行模式 多行模式下,换行符可以当做字符串边界。
\g 全局匹配
10.字符串的正则方法
①.search()返回字符串中第一次匹配到正则的索引,匹配不到,返回-1
console.log(‘hello’.search(/hello/));//0
②.match()与RegExp.exec()返回相同的结果,匹配成功返回数组,不成功返回null
console.log(‘hello’.match(/\w(\w)/));
//[“he”, “e”, index: 0, input: “hello”, groups: undefined]
结果分析:一个\w匹配一个,两个\w匹配两个。
③.split() 把字符串分割成数组
var str = ‘hello.nihao,app.dds,orange bbs;apple’;
console.log(str.split(/[,. ;]/)); //正则作为分隔符,可以指定多种形式的分隔符
④.replace() str.replace(reg, news) 执行字符串替换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值