js通过内置对象RegExp支持正则表达式
实例化RegExp对象的两种
1.字面量
var reg = /\bis\b/g;
2.构造函数
var reg = new RegExp('\\bis\\b','g');
修饰符
g:global,全文搜索,不添加,搜到第一个匹配就停止
i: ignore case,忽略大小写,正则默认大小写敏感
m: multiple lines 多行搜索
正则表达式由两种基本字符类型组成
1.原义文本字符:代表它原来含义的字符 例如:abc、123
2.元字符:在正则表达式中有特殊意义的非字母字符 例如:\b表示匹配单词边界,而非\b
在正则表达式中具体特殊含义的字符:* + ? $ ^ . \ () {} []
元字符:
\t:水平制表符;
\v:垂直制表符;
\n:换行符;
\r:回车符;
\0:空字符;
\f:换页符;
\cX:与X对应的控制字符
元字符中的字符类
一般情况下正则表达式一个字符对应字符串一个字符
表达式 ab\t 的含义是: 一个字母a一个字母b加一个水平制表符
可以使用元字符[]来构建一个简单的类,所谓类是指符合某些特征的对象,一个泛指,而不是特指某个字符
表达式[abc]:把字符 a 或 b 或 c 归为一类,表达式可以匹配这类的字符,即匹配abc中的一个
'a1b2c3d4'.replace(/[abc]/g,'字符');
"字符1字符2字符3d4"
字符类取反
使用元字符 ^ 创建 反向类/负向类,反向类的意思是:不属于某类的内容
表达式 [^abc] 表示 不是字符a或b或c 的内容
'a1b2c3d4'.replace(/[^abc]/g,'字符');
"a字符b字符c字符字符字符"
范围类 【a-z】,闭区间,里面可以连写【a-zA-Z】
`2017-03-19`.replace(/[0-9-]/, `X`);
"X017-03-19"
`2017-03-19`.replace(/[0-9-]/g, `X`);
"XXXXXXXXXX"
预定义类
. 等价于 [^\r\n] 表示除了回车符和换行符之外的所有的字符
\d 等价于 [0-9] 数字字符 d:digit
\s 等价于 [\t\n\x0B\f\r] 空白符 s:space
\w 等价于 [a-zA-Z_0-9] 单词字符(字母、数字下划线) w:word
大写的表示取反
^ 以XXX开始
$ 以XXX结束
\b 单词边界
m 多行
量词:
?出现0次或1次
+ 出现1次或多次
* 出现0次或多次
{n} 出现n次
{n,m}出现n到m次,
{n,} 至少出现n次,
贪婪模式:正则表达式在匹配时,尽可能多的匹配,直到匹配失败
非贪婪模式:正则表达式尽可能少的匹配,即一旦成功匹配就不再继续匹配
做法:在量词后加上 ? 即可
'123456789'.replace(/\d{3,5}?/g'A')
"AA"
'123456'.replace(/\d{3,5}/g,'A')
"A6"
分组:
(内容){3}
Byr(on|Ca)sper 或
反向引用:
2015-12-25 == 12/25/2015
"2015-12-25".replace(/(\d{4})-(\d{2})-(\d{2})/g,"$2$3$1")
(?:Byron).(ok) 忽略分组
实例化RegExp对象的两种
1.字面量
var reg = /\bis\b/g;
2.构造函数
var reg = new RegExp('\\bis\\b','g');
修饰符
g:global,全文搜索,不添加,搜到第一个匹配就停止
i: ignore case,忽略大小写,正则默认大小写敏感
m: multiple lines 多行搜索
正则表达式由两种基本字符类型组成
1.原义文本字符:代表它原来含义的字符 例如:abc、123
2.元字符:在正则表达式中有特殊意义的非字母字符 例如:\b表示匹配单词边界,而非\b
在正则表达式中具体特殊含义的字符:* + ? $ ^ . \ () {} []
元字符:
\t:水平制表符;
\v:垂直制表符;
\n:换行符;
\r:回车符;
\0:空字符;
\f:换页符;
\cX:与X对应的控制字符
元字符中的字符类
一般情况下正则表达式一个字符对应字符串一个字符
表达式 ab\t 的含义是: 一个字母a一个字母b加一个水平制表符
可以使用元字符[]来构建一个简单的类,所谓类是指符合某些特征的对象,一个泛指,而不是特指某个字符
表达式[abc]:把字符 a 或 b 或 c 归为一类,表达式可以匹配这类的字符,即匹配abc中的一个
'a1b2c3d4'.replace(/[abc]/g,'字符');
"字符1字符2字符3d4"
字符类取反
使用元字符 ^ 创建 反向类/负向类,反向类的意思是:不属于某类的内容
表达式 [^abc] 表示 不是字符a或b或c 的内容
'a1b2c3d4'.replace(/[^abc]/g,'字符');
"a字符b字符c字符字符字符"
范围类 【a-z】,闭区间,里面可以连写【a-zA-Z】
`2017-03-19`.replace(/[0-9-]/, `X`);
"X017-03-19"
`2017-03-19`.replace(/[0-9-]/g, `X`);
"XXXXXXXXXX"
预定义类
. 等价于 [^\r\n] 表示除了回车符和换行符之外的所有的字符
\d 等价于 [0-9] 数字字符 d:digit
\s 等价于 [\t\n\x0B\f\r] 空白符 s:space
\w 等价于 [a-zA-Z_0-9] 单词字符(字母、数字下划线) w:word
大写的表示取反
^ 以XXX开始
$ 以XXX结束
\b 单词边界
m 多行
量词:
?出现0次或1次
+ 出现1次或多次
* 出现0次或多次
{n} 出现n次
{n,m}出现n到m次,
{n,} 至少出现n次,
贪婪模式:正则表达式在匹配时,尽可能多的匹配,直到匹配失败
非贪婪模式:正则表达式尽可能少的匹配,即一旦成功匹配就不再继续匹配
做法:在量词后加上 ? 即可
'123456789'.replace(/\d{3,5}?/g'A')
"AA"
'123456'.replace(/\d{3,5}/g,'A')
"A6"
分组:
(内容){3}
Byr(on|Ca)sper 或
反向引用:
2015-12-25 == 12/25/2015
"2015-12-25".replace(/(\d{4})-(\d{2})-(\d{2})/g,"$2$3$1")
(?:Byron).(ok) 忽略分组