您的当前位置:首页正文

正则表达式-javascript

来源:图艺博知识网

前言

由于经常被正则虐,看见就不知如何处理,已断断续续学习过一些,但是一段时间没有接触就连最基本的东西也忘了,原因就是不系统,也没有实战。现在把正则表达式整理一下,方便以后的学习和实践中掌握。

1. 什么是正则表达式

正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。

正则表达式是一个高效匹配检测的东西,对于表单检测,高亮显示搜索结果还是进行URL的地址映射,一般都需要用到它。


2. ReqExp

这一块是基于《javascript高级程序设计的第三版》整理部分。
ECMAScript是通过ReqExp类型来支持正则表达式

构造正则表达式的方法
  • 以字面量的形式来定义(method1)
  • 使用ReqExp构造函数(method2)
//pattern就是一个正则表达式。
//flags用于表达正则行为的标志。

//以字面量的形式来定义
var expression = /pattern/flags; 
//构造函数
var expression = new ReqExp("pattern","flags"); 

flags标志 作用
g 全局模式,匹配将用于所有的字符串
i 匹配不区分大小写
m 模式

元字符

在正则表达式中有一些特殊的字符符号我们是不能直接使用的,必须对其进行转义后才能使用。如“\”,因为这些字符在正则表达式中有特殊的语法含义,这类字符被称为元字符,正则表达式中的元字符有:

([{\^$|)?*+.]}都属于元字符

如果要在正则表达式中直接匹配这些元字符,需要对它们转义。

  • 由于是直接字面量,所以转义就ok了。(method1)
  • 参数都是字符串,所以涉及到双重转义。(method2)
等价关系
ReqExp的实例属性
属性名称 说明
global 表示是否设置了g标志,返回boolean值
ignoreCase 表示是否设置了i标志,返回boolean值
lastIndex 表示开始搜索下一个匹配项的字符位置,从0开始,返回的是整数。
multiline 表示是否设置了m标志,返回boolean值
source "字面量"的形式返回正则表达式。

之前的这些属性其实用于不大,就当了解吧。

ReqExp实例方法---exec( )主力

exec(应用模式的字符串 ),返回包含第一个匹配项信息的数组,但是这个数组有两个额外的属性indexinput

  • index 表示匹配项在字符串中的位置。
  • input 表示应用正则表达式的字符串。
  • 数组 第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。

注意:使用的exec()方法的时候设置和不设置g标志是有区别的。

设置g 不设置g
每次调用exec( )都会在字符串中寻找新的匹配项 始终只是返回第一个匹配项的信息。

练练手

//eg1:
<script type="text/javascript">
    var text = "cat, bat, sat, fat";
    var pattern1 = /.at/;
    var matches = pattern1.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern1.lastIndex);

    //还有一组返回的也是一样的。
</script>
eg1的返回结果
//eg2:
    var pattern2 =  /.at/g;
    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);

    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);
eg2返回的结果

很明显可以看到两者的差别。

IE的javascript实现在lastIndex属性上存在偏差,即使在非全局模式下,lastIndex属性每次也会变化。


test( 字符串)

  • 模式与该参数匹配返回true
  • 不匹配就返回false

基于此,test( )一般是用在if语句中的。

    var text = "000-00-0000"
    var pattern = /\d{3}-\d{2}-\d{4}/;
    if(pattern.test(text)){
        console.log("matched");
//很明显会在chorme的控制台console中输出matched

继承的方法

方法 返回
toLocaleString( ) /toString() 返回匹配正则表达式的字面量。
valueOf( ) 返回正则表达式本身
//eg3:
    var pattern = new RegExp("\\[bc\\]at","g");
    console.log(pattern.toLocaleString());
    console.log(pattern.toString());
    console.log(pattern.valueOf());
eg3返回的结果

以上就把正则在javascript中的大致整理了下,下面就主要整理正则表达式中的(pattern)写法以及常用元字符的功能。


3. 元字符整理

元字符(常用) 说明
. 匹配除了换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d == [0-9] 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
元字符(重复) 说明
* 重复0次或更多次
+ 重复一次或更多次
重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n, m} 重复n到m次
//写一个正则可以匹配谷歌的三种网址
var gogle = 
var google = 
var gooogle = 
var pattern =  ok
元字符() 说明
() 分组
markdown制作表格的竖 表示分枝
[ ] 表示选择里面的任意一个
(\d{1,3}\.){3}\d{1,3} 简单的ip匹配,但是大于255也可以匹配到;
改进:
((2[0-4])\d | 25[0-5] | [01]\d\d)\. ){3}(2[0-4])\d | 25[0-5] | [01]\d\d)
| 表示的分枝
元字符(反义) 说明
\W == [0-9A-Za-z_汉字] 匹配任意不是字母,数字,下划线,汉子的字符
\S 匹配任意不是空白符的字符
\D == [^0-9] 匹配任意的非数字的字符
\B 匹配不是单词开头或者结尾的位置
^x 匹配除了x意外的任意字符
[^aeiou] 匹配除了aeiou这几个字母意外的任意字符

到此打住,关于后向引用,零宽断言,负向零宽断言,贪婪与懒惰先不整理。


参考


实战区域

会不定期的整理实战在这个部分。

Top