正则表达式
更新:
\s 空格
\S 非空格
\b 单词边界
正向前瞻(后面是aaa)
(?=aaa)匹配后面有aaa,但匹配结果不包含aaa
(?:aaa)匹配后面有aaa,匹配结果包含aaa
负向前瞻(后面不是aaa)
(?!aaa)匹配后面不是aaa的
( ) 分组
( a|b ) 候选 a和b都匹配
[ ] 和(或)
[a-zA-Z_0-9]
[^ ] 不包括
{ } 表示数量,出现次数
{ 3 } 出现3次
{ 3,5 } 出现3-5次的都算
{ 3, } 至少出现3次
? 0个或1个
- 0个更多
- 1个或更多
g 全局global
i 忽略大小写 ignoreCase
m 多行匹配 multiline
============
? * +
贪婪模式,先匹配所有字符串,从末尾不断去掉一个字符。知道匹配或没有字符。从后开始。
(?*+)?
惰性模式,只要是后面加的是?,表示从字符串第一个开始匹配。
(?*+) +
支配量词,只匹配整个字符串,没有就算了。
=============
^ 以...开头
$ 一...结尾
. 点表示一个字符
\ 转义
==============
\n 换行符
\r 回车符
\t 制表符
\f 换页符
\b 回退符
\v 垂直制表符
\0 空字符
================
\b 单词的边界
\B 非单词的边界
\d 数字
\D 非数字
\s 空白字符
\S 非空白字符
\w 单词字符(所有的字母,数字,下划线)
\W 非单词字符
基本手册:
http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
关于$系列
https://segmentfault.com/a/1190000002732946?utm_source=APP&utm_medium=iOS&utm_campaign=socialShare
javascript中创建一个正则表达式有两种方式:
1, var reg = /pattern/attributes ;
2, var reg = new RegExp('pattern', attributes);
当然了类似于创建对象和数组,应该还是比较推荐第一种的。
其中:
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
g i m
g:全局匹配
i:不区分大小写进行匹配
m:修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。
=======================
/^p{n}$/
{n}里面n表示匹配的这个字符的连续的个数。/a{3}/则表示匹配 'aaa' 3个连续的a字符。
/a{m,n}/ 表示m或者n个连续的a
/a{m, }/ 表示m以上个连续的a
^表示只匹配字符串的开头,
$表示只匹配字符串的结尾。
*,+,?
*表示0次或者多次,等同于{0,},即
c* 和 c{0,} 是一个意思。
+表示一次或者多次,等同于{1,},即
c+ 和 c{1,} 是一个意思。
最后,?表示0次或者1次,等同于{0,1},即
c? 和 c{0,1} 是一个意思。
如果我们希望正则尽量少地匹配字符,那么就可以在表示数字的符号后面加上一个?。
如 reg = /c{1,}?/; str='ccccc'; execReg(reg,str);
或 |
/b|c/ 匹配b或者c
[abc]
表示 匹配a或者b或者c中的任意一个字符。
(b|c)
小括号就是括号内看成一个整体 ,而上面的中括号就是匹配括号内的其中一个。
[^abc]就表示不能是a,b或者c中的任何一个。
=======================
方法:
reg.test(str);//返回布尔值 true false
reg.exec(str);//返回数组
str.match(reg);//返回数组
str. replace (reg,’new str’);
str.search(reg); // search返回正则表达式第一次匹配的位置。
str.split(reg,’seprator’); split返回分割后的数组
======
使用[^这里添排除的内容] 例如 [^\d] 排除数字
使用[^\s] 排除空格
使用[^a] 排除字符a
小括号就是括号内看成一个整体 ,中括号就是匹配括号内的其中一个,大括号就是匹配几次
匹配非开头空格的内容
var a = ' abc d '
a.replace(/^^\s/g,'')
"abc d "