正则表达式
正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。
正则语法
/正则表达式主体/修饰符(可选)
示例说明:/hello/i 是一个正则表达式。hello 是一个正则表达式主体 (用于检索)。i 是一个修饰符 (搜索不区分大小写)。
var reg = /hello/i;
怎么使用:上面创建的字符串表达式可以用来检索字符串,比如检索下面字符串出现字符串的位置。
var reg = /hello/i;
var string = "Morning hello everyone";
console.log(string.search(reg));//8 表示出现此表达式的位置是8,从0开始。
var string = "Morning Hello everyone";//在不区分大小写模式时效果一样
console.log(string.search(reg));//8
除了查找,字符串替换也是很常见的操作,查找 search()
和替换 replace()
是字符串的两个成员方法。
var reg = /everyone/i;
var rep = "everybody";
var string = "Morning hello everyone";
console.log(string.replace(reg,rep));//Morning hello everybody
字符串的检索和替换使用子字符串也能实现,但是使用正则表达式可以让实现功能更强,比如不区分大小写。
正则表达式修饰符
下表列出了正则表达式常用的修饰符:
修饰 | 含义 | 描述 |
---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
s | 特殊字符圆点 . 中包含换行符\n
|
默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n 。 |
全局匹配
var reg = /hello/g;//全局
var string = "Morning hello everyone hello";
console.log(string.match(reg));//["hello","hello"] 返回的是字符串数组 表示检索到了多次
var reg2 = /hello/;//非全局
console.log(string.match(reg2));//["hello",8] 只返回第一个匹配字符串和它的索引
多行匹配:^表示匹配开头,下面的\n
表示换行符
var reg = /^hello/g;//g表示匹配一行
var string = "hello \n everyone \nhello";
console.log(string.match(reg));//["hello"]
var reg2 = /^hello/gm;//gm表示匹配多行
console.log(string.match(reg2));//["hello","hello"]
圆点.匹配:默认情况下圆点可以匹配任何字符,但是换行符\n
除外,加上s符号后圆点可以匹配换行符\n
var reg = /hello./;//默认匹配
var string = "hello\n everyone";
console.log(string.match(reg));//null 圆点没有匹配到\n
var reg = /hello./s;//匹配换行符
console.log(string.match(reg));//["hello\n"] 匹配换行符
正则表达式模式
正则表达式最强大的地方是可以通过模式匹配,通过特定的正则表达式模式,我们可以很容易判断一个数字是不是电话号码,验证一个邮箱是否合法,以及验证url格式等。
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] |
查找方括号之间的任何字符。 |
[0-9] |
查找任何从 0 至 9 的数字。 |
(x |y)
|
查找任何以| 分隔的选项。 |
元字符是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
\d |
查找数字。 |
\s |
查找空白字符。 |
\b |
匹配单词边界。 |
\uxxxx |
查找以十六进制数 xxxx 规定的 Unicode 字符。 |
量词:
量词 | 描述 |
---|---|
n+ |
匹配任何包含至少一个 n 的字符串。 |
n* |
匹配任何包含零个或多个 n 的字符串。 |
n? |
匹配任何包含零个或一个 n 的字符串。 |
网友评论