Javascript正则表达式详解(一)

简介

先来一段介绍:

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

简单说就是:

它是对字符串执行模式匹配的强大工具。

Javascript中的正则表达式相较于其他语言来说实现的并不完整,但仍然是十分强大的,能够帮助我们完成绝大多数模式匹配任务。下面将一步一步详细介绍。

定义

在Javascript中,定义一个正则表达式有两种方式,一种是直接量,另一种是使用构造函数。

直接量

Javascript可以使用类似Perl的语法定义一个正则表达式

var r = /pattern/flags;

其中pattern是任何简单或复杂的正则表达式,flags是用以表达正则表达式行为的一个或者多个标识。

flags

  • g 表示全局(global)模式,即模式将被应用于所有字符串
  • i 表示不区分大小写
  • m 多行模式

来看几个例子

var r1 = /at/g; // 匹配字符串中所有'at'的实例

var r2 = /.ho/gi; // 匹配以'ho'结尾的三个字符的组合,不区分大小写

使用构造函数

Javascript中正则表达式的构造函数为RegExp,即Regular Expression的缩写,它接收两个参数,第一个为要匹配的字符串模式,另一个是可选的标识位。

如:

var r = new RegExp('hello', 'g'); // 匹配字符串中所有的'hello'实例

有一点一定要注意,第一个参数是一个字符串,而不是正则表达式的直接量。

元字符

在正则表达式的模式中,有一些字符是有特殊含义的,被称为元字符,如果要匹配元字符,则必须对其进行转义。

这些元字符分别是:

( [ { \ ^ $ | ) ? * + . ] }

例如:

// 如果要匹配'/user/name'这个字符串,正则表达式需要这样
var r1 = /\/user\/name/;

var r2 = /\.ho/; // 匹配'.ho'这个字符串

关于使用构造函数定义

如果使用构造函数定义正则表达式,由于构造函数的第一个参数必须是一个字符串,在匹配元字符时,这将会导致双重转义。

例如:

var r1 = new RegExp('\/user', 'g'); // wrong

// 由于\在字符串中需要转义为\\,所以,如果要匹配/user,正则表达式需要写为
var r1 = new RegExp('\\/user', 'g');

所有元字符都需要进行双重转义

另外,还有一些预定义的特殊字符也被称为元字符

元字符描述
.查找单个字符,除了换行和行结束符。
\w查找单词字符。
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NUL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

有一点需要特别注意:不管一个元字符代表多少种含义,单个元字符始终只匹配单个字符

元字符其实不必刻意花时间去记忆,等了解了全部的正则表达式使用方法之后,自然就知道哪些字符是有特殊含义的,也就知道了哪些时候需要转义了。

下面将陆续介绍正则表达式的使用方法。

Javascript正则表达式详解(二)

    原文作者:chshouyu
    原文地址: https://segmentfault.com/a/1190000000517111
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞