正则表达式1

161 阅读5分钟

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

正则表达式构建有两种方式字面量或调用RegExp对象的构造函数。

直接量写法: var re = /0123456789/ 条件包含在斜杠中。

调用RegExp对象的构造函数写法: var re = new RegExp()

var regex = new RegExp('asd', 'i');

var regex = /xyz/i;  //这两种写法此时是等价的 这里的i 为表示不区分大小写

使用正则表达式

test

一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false

 /asd/.test()

这个模式就能且仅能匹配 "asd" 字符按照顺序同时出现的情况。

image.png

 /[0123456789]/.test('asdar1234431') 

这种写法在斜杠中有中括号表示匹配字符串中是否含有中括号中的任意字符 不使用中括号表示一整句匹配的时候需要连在一起

image.png

/[0-9]/.test('asdar1234431')

此句表示字符串中是否含有0-9中任意数字 返回true或者false 中划线表示0到9 若要匹配中划线 使用 \ 转译

image.png 可以使用中划线来指定一个字符范围 [0-9]也可以说是匹配任意数字在正则表达式中可以使用 \d 表示任意数字

image.png

字符等价类含义
.(点)[^\r\n]所有字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[\t\n\x0B\f\r]空白符
\S[^\t\n\x0B\f\r]非空白符
\w[a-zA-Z_0-9]单词字符(字母、数字、下划线)
\W[^a-zA-Z_0-9]非单词字符

在正则 ^ 表示取反

/[^aeiou]/.test('asdar1234431')

表示匹配字符串中是否有非aeiou的字符

image.png

/123?11/.test('asdar431')

image.png

问号表示之前的一个字符可以出现也可以不出现。这里面就表示了3可出现也可不出现。

/a{4}/.test('aaaa')

image.png

在花括号中的数组表示前方的条件字符需要出现n次,这句表示a需要连续出现4次

/a{4,6}/.test('aaaa')

表示a可以连续出现4次或者5次或者6次

/a{4,}/.test('aaaa')

表示a最少出现4次

image.png

/(foo){3}/i.test('foofoofoo')

表示匹配foo连续出现3次 小括号里的为一个整体 表示foo整体连续出现3次

image.png

可以使用这种方法匹配时间

var dateTime = /\d{1,2}-\d{1,2}-\d{4} \d{1,2}:\d{2}/
dateTime.test('30-10-2003 8:12')

image.png

+ 与 *

  • 表示一次或多次。要匹配 + 字符,使用转译 +。
  • 表示零次或多次。要匹配 * 字符,使用转译 *。
/\d+/.test('1234')
/\d+/.test('')
/\d+/.test('1')
/\d*/.test('1234')
/\d*/.test('')
/\d*/.test('1')

image.png

正则子表达式

在一次性对多个元素使用 * 需要使用小括号 将这些元素包裹起来,创建一个分组,小括号内的部分会被当做一个整体处理。

image.png image.png

image.png

exec

exec 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null 若无法匹配返回null 否则返回一个表示匹配字符串信息的数组。

image.png

image.png

数组的初始 0 位置表示的是匹配的内容 index 表示符合匹配的内容在字符串中的起始位置

image.png 在字符串中也有类似的match方法

image.png

注意:match是字符串的方法,exec是正则对象实例的方法.

如果正则表达式中包含了使用小括号的子表达式分组,匹配分组的内容也会出现在数组中。

image.png 这句表达了匹配位于 ' ' 中的所有内容因为需要匹配位于引号内的内容所以 ([^']*) 表达了非引号的所有内容
在数组中 第一个元素表达了整个模式匹配的字符串,之后是与第一个分组匹配的部分字符串,然后是第二分组以此类推。

若分组未匹配到任何字符串,那么数组中与该分组相对应的元素为undefined。 若分组匹配;额多个元素,则数组中只包含最后一个匹配项目。

image.png

正则表达式的选项

/foo/igmysud
new RegExp('foo', 'igmysud')
第二个/后面的部分即为正则表达式的选项
不同选项有着不同的效果
i ignoreCase 不区分大小写
g global     全局匹配,即找到所有的匹配,而不是只找到一个匹配 正常只会匹配第一个符合正则的字符后停止 全局匹配会匹配字符串中所有符合正则的字符
m multiline  多行匹配,有m的时候^$可以表示第行的开始和结束,没有m时表示整个字符串的开始和结束
s dotAll     有s时,正则中的.可以代表任意符号
u unicode    启用uncode
d hasIndices 匹配结果中会包含每个捕获分组的开始和结束位置
y sticky     每次匹配必须从首次开始的位置就成功