美文网首页
Js正则表达式

Js正则表达式

作者: 老衲灬 | 来源:发表于2018-08-13 22:03 被阅读25次

一、Js正则表达式概述

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于RegExp的exec()test()方法, 以及String的match()replace()search()split()方法。

二、创建正则表达式对象

<script type="text/javascript">
    //声明正则对象的方式:
    //1、字面量方式
    var re = /\d/;
    //2、内置构造函数声明方式
    var re = new RegExp('\d');
var re = new RegExp('\d',g);
var re = new RegExp(/\d/,g);
</script>

三、正则中常用方法及字符串中与正则相关的方法

1、正则对象的三个方法
<script type="text/javascript">
    //①test()判断字符串中是否出现某个字符串,返回布尔值
    var re = /abc/;
    var str = '00abc66';
    console.log(re.test(str));
    //②exec()查找并返回字符串中指定的某个字符串,只匹配一次
    var re = /abc/;
    var str = 'a0bc88abc00abc';
    console.log(re.exec(str));
    //③compile()方法用于改变正则匹配的内容
    var re = /ab/;
    var str = "aabcdef";
    console.log(re.test(str));  //true
    re.compile(/bd/);
    console.log(re.test(str));  //false
    re.compile('66');
    console.log(re.test(str));  //false
</script>
2、字符串中与正则相关的方法
<script type="text/javascript">
    //①search()方法,返回符合条件的字符串首次出现的位置(下标)
    var re = /abc/;
    var str = '00abc66';
    console.log(str.search(re));
    //②match()方法,返回查找的结果,如果查询不到返回NULL
    console.log(str.match(re));
    //③replace()方法,将匹配到的内容替换成指定内容
    console.log(str.replace(re,"*"));
    //④split()方法,将字符串分割成字符串数组
    console.log(str.split(re));
</script>

四、正则表达式的编写格式

1、正则表达式的组成

①匹配符(查什么字符)
②限定符(查多少所匹配字符)
③定位符(查询范围)
④修饰符(附加规则)

2、正则表达式子表达式相关

①子表达式
在正则表达式中,通过一对圆括号括起来的内容,我们就称之为“子表达式”。如:var re = /\d(\d)\d/;
②捕获
在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。
③反向引用
在正则表达式中,我们可以使用\n(n>0,正整数,代表系统中的缓冲区编号)来获取缓冲区中的内容,我们把这个过程就称之为“反向引用”。

示例:
<script type="text/javascript">
    var str = "d1122jj7667h6868s9999";
    //查找AABB型的数字
    console.log(str.match(/(\d)\1(\d)\2/)); //1122
    //查找ABBA型的数字
    console.log(str.match(/(\d)(\d)\2\1/)); //7667
    //查找ABAB型的数字
    console.log(str.match(/(\d)(\d)\1\2/)); //6868
    //查找四个连续相同的数字
    console.log(str.match(/(\d)\1\1\1/));   //9999
</script>
3、匹配符

匹配符:字符匹配符用于匹配某个或某些字符,例如:/abc/就是匹配”abc”
在正则表达式中,通过一对中括号括起来的内容,我们就称之为“字符簇”。字符簇代表的是一个范围,但是匹配时,只能匹配某个范围中固定的结果。

在字符簇中,通过一个^(脱字符来表示取反的含义) 元字符(常用)
4、限定符

限定符可以指定正则表达式的一个给定字符必须要出现多少次才能满足匹配。

*:匹配前面的子表达式零次或多次,0到多
+:匹配前面的子表达式一次或多次,1到多
?:匹配前面的子表达式零次或一次,0或1
{n}:匹配确定的 n 次 
{n,}:至少匹配 n 次 
{n,m}:最少匹配 n 次且最多匹配 m 次

注意:针对于{n,m},正则在匹配到一个符合多种次数的字符串时,优先匹配次数多的,即能匹配到m次就不会匹配n次,这就是贪婪模式(默认)。如果在其后加?{n,m}?则会更改为非贪婪模式(惰性模式),则此时正则优先匹配n次。

<script type="text/javascript">
    var str = "aa1a22a333a6a8a";
    console.log(str.match(/a\d*/));      //a
    console.log(str.match(/a\d+/));      //a1
    console.log(str.match(/a\d?/));      //a
    console.log(str.match(/a\d{3}/));    //a333
    console.log(str.match(/a\d{2,}/));   //a22
    console.log(str.match(/a\d{1,3}/));  //a1
    console.log(str.match(/a\d{1,3}?/)); //a1

    //贪婪模式加深理解,案例如下:
    //贪婪模式下最开始的'a2就符合条件',但是它会返回'a22'
    //注意:它是在遇到一个同时符合多个次数条件的字符串时,取符合次数多字符串
    var str = "a22aa1a333a6a8a";
    console.log(str.match(/a\d{1,3}/));   //a22
    console.log(str.match(/a\d{1,3}/g));  //a22 a1 a333 a6 a8
    console.log(str.match(/a\d{1,3}?/));  //a2
    console.log(str.match(/a\d{1,3}?/g)); //a2 a1 a3 a6 a8
</script>
5、定位符

定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。

^ (脱字符):匹配输入字符串的开始位置
$:匹配输入字符串的结束位置
\b:匹配一个单词边界
\B:匹配非单词边界
6、正则表达式的匹配模式(修饰符)

表示正则匹配的附加规则,放在正则模式的最尾部。修饰符可以单个使用,也可以多个一起使用。
g全局匹配,找到所有匹配,而不是在第一个匹配后停止
i匹配全部大小写
m多行,将开始和结束字符(^$)视为在多行上工作(也就是,分别匹配每一行的开始和结束(由\n\r分割),而不只是只匹配整个输入字符串的最开始和最末尾处。
sm相反,单行匹配

var re = /^[a-z]/gim;   //可组合使用
7、转义字符

因为在正则表达式中 . + \ 等属于表达式的一部分,但有时也需要匹配这些特殊字符,所以,需要使用反斜杠对特殊字符进行转义。

需要转移的字符:
点号.
小括号()
中括号[]
左斜杠/
右斜杠\
选择匹配符|

* 
?
{}
+ 
$
^
8、或者"|"的用法
<script type="text/javascript">
    var str = 'ipad iphone,imac ipod,iamsorry';
    var reg = /\bi(pad|phone|mac|pod)\b/g;
    console.log(str.match(reg));
</script>

相关文章

网友评论

      本文标题:Js正则表达式

      本文链接:https://www.haomeiwen.com/subject/hzkpbftx.html