正则表达式的知识点分类汇总
2017-10-19 16:00
281 查看
\ 做为转意
量词:
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa (+和?)
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
{n} 精确匹配n次
{n,} 匹配n次及以上,至少
{n,m} 匹配n到m次
x|y 匹配x或y
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
(x) 匹配x保存x在名为$1...$9的变量中
[\b] 匹配一个退格符
任意字符
边界匹配字符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9_]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
RegExp对象:
1.字面量 var reg=/\bis\b/g; var reg=/\bis\b/gi;
2.构造函数
var reg = newRegExp('\\bis\\b','g');参数是字符串
对象的属性:reg.golbal,reg. ignoreCase,reg. multiline,
Reg.lastIndex:匹配的内容最最后一个单词的下一个位置(如果是非全局调用(g)的话,为0)
Reg.source:正则表达式的文本字符串’\d’
Regexp对象本身的方法(prototype)
RegExp.prototype.text(str),返回true/false
var reg=/\w/g;
while(reg.test('abc')){
console.log(reg.lastIndex);//三次分别输出1,2,3
}
RegExp.prototype.exec(str), ,
此数组的第 0
个元素是与正则表达式相匹配的文本,第 1
个元素是与 RegExpObject
的第 1
个子表达式相匹配的文本(如果有的话),第 2
个元素是与RegExpObject
的第 2
个子表达式相匹配的文本(如果有的话),以此类推。
当 RegExpObject
是一个全局正则表达式时,exec()
的行为就稍微复杂一些。它会在 RegExpObject
的 lastIndex
属性指定的字符处开始检索字符串 string。当 exec()
找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject
的lastIndex
属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec()
方法来遍历字符串中的所有匹配文本。当 exec()
再也找不到匹配的文本时,它将返回 null,并把 lastIndex
属性重置为 0。
字符串的原型方法:(serch,match,replace,replaceAll)
如果 regexp
没有标志 g,那么 match()
方法就只能在stringObject
中执行一次匹配。如果没有找到任何匹配的文本, match()
将返回 null,和exec一样
如果 regexp
具有标志 g,则 match()
方法将执行全局检索,找到stringObject
中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是
stringObject 中所有的匹配子串,而且也没有 index
属性或 input
属性。
如:
var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))//
1,2,3
stringObject.replace(regexp/substr,replaceStr/function);
name = "Doe, John";
name.replace(/(\w+)\s*,\s*(\w+)/, "$2$1");//"John Doe"
name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
returnword.substring(0,1).toUpperCase()+word.substring(1);}
);
Function有四个参数:
修饰符(可以放在一起同时使用)
g:global,全文搜索,不添加,搜到第一个匹配就停止
i: ignore case,忽略大小写,正则默认大小写敏感
m: multiple lines多行搜索,把换行符当成新的一行
如:‘@aa
@bb
ae44
@cc’.replace(/^@\w/gm,’X’)
贪婪模式:,匹配三到六次中取尽可能多的匹配,即默认匹配六次
非贪婪模式:在量词后面加上?即变成非贪婪模式,尽可能少的匹配
只匹配三位,而不是五位
分组 使用()来分组,使量词作用于分组
(Breqe){3} 和Breqe{3}
或 | :可以将整个正则表达式进行或,如
Breqe|adfasdfa:
如果不想作用于整个表达式,可以用分组进行隔绝:
Bre(asa|sqd)asdf:
反向引用:
每个分组对应着$1到$n
忽略分组:
Bre(asa|sqd)(asdf)
Bre(?:asa|sqd)(asdf)
前瞻: 文本头部向尾部解析,文本尾部是前,文本头部是后,当正则匹配到时,继续向前,即文本尾部检查是否断言。后顾/后瞻方向相反,js不支持后顾。
符合断言的是正向匹配或肯定匹配,不符合的是否定匹配或者负向匹配
exp:正则表达式,assert:断言
量词:
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa (+和?)
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
{n} 精确匹配n次
{n,} 匹配n次及以上,至少
{n,m} 匹配n到m次
x|y 匹配x或y
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
(x) 匹配x保存x在名为$1...$9的变量中
[\b] 匹配一个退格符
任意字符
边界匹配字符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9_]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
RegExp对象:
1.字面量 var reg=/\bis\b/g; var reg=/\bis\b/gi;
2.构造函数
var reg = newRegExp('\\bis\\b','g');参数是字符串
对象的属性:reg.golbal,reg. ignoreCase,reg. multiline,
Reg.lastIndex:匹配的内容最最后一个单词的下一个位置(如果是非全局调用(g)的话,为0)
Reg.source:正则表达式的文本字符串’\d’
Regexp对象本身的方法(prototype)
RegExp.prototype.text(str),返回true/false
var reg=/\w/g;
while(reg.test('abc')){
console.log(reg.lastIndex);//三次分别输出1,2,3
}
RegExp.prototype.exec(str), ,
此数组的第 0
个元素是与正则表达式相匹配的文本,第 1
个元素是与 RegExpObject
的第 1
个子表达式相匹配的文本(如果有的话),第 2
个元素是与RegExpObject
的第 2
个子表达式相匹配的文本(如果有的话),以此类推。
当 RegExpObject
是一个全局正则表达式时,exec()
的行为就稍微复杂一些。它会在 RegExpObject
的 lastIndex
属性指定的字符处开始检索字符串 string。当 exec()
找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject
的lastIndex
属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec()
方法来遍历字符串中的所有匹配文本。当 exec()
再也找不到匹配的文本时,它将返回 null,并把 lastIndex
属性重置为 0。
字符串的原型方法:(serch,match,replace,replaceAll)
如果 regexp
没有标志 g,那么 match()
方法就只能在stringObject
中执行一次匹配。如果没有找到任何匹配的文本, match()
将返回 null,和exec一样
如果 regexp
具有标志 g,则 match()
方法将执行全局检索,找到stringObject
中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是
stringObject 中所有的匹配子串,而且也没有 index
属性或 input
属性。
如:
var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))//
1,2,3
stringObject.replace(regexp/substr,replaceStr/function);
name = "Doe, John";
name.replace(/(\w+)\s*,\s*(\w+)/, "$2$1");//"John Doe"
name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
returnword.substring(0,1).toUpperCase()+word.substring(1);}
);
Function有四个参数:
修饰符(可以放在一起同时使用)
g:global,全文搜索,不添加,搜到第一个匹配就停止
i: ignore case,忽略大小写,正则默认大小写敏感
m: multiple lines多行搜索,把换行符当成新的一行
如:‘@aa
@bb
ae44
@cc’.replace(/^@\w/gm,’X’)
贪婪模式:,匹配三到六次中取尽可能多的匹配,即默认匹配六次
非贪婪模式:在量词后面加上?即变成非贪婪模式,尽可能少的匹配
只匹配三位,而不是五位
分组 使用()来分组,使量词作用于分组
(Breqe){3} 和Breqe{3}
或 | :可以将整个正则表达式进行或,如
Breqe|adfasdfa:
如果不想作用于整个表达式,可以用分组进行隔绝:
Bre(asa|sqd)asdf:
反向引用:
每个分组对应着$1到$n
忽略分组:
Bre(asa|sqd)(asdf)
Bre(?:asa|sqd)(asdf)
前瞻: 文本头部向尾部解析,文本尾部是前,文本头部是后,当正则匹配到时,继续向前,即文本尾部检查是否断言。后顾/后瞻方向相反,js不支持后顾。
符合断言的是正向匹配或肯定匹配,不符合的是否定匹配或者负向匹配
exp:正则表达式,assert:断言
相关文章推荐
- 《正则表达式》知识点汇总摘录
- -------------Android开源项目分类汇总【老外汇总版本】
- 机器学习常见算法分类汇总
- [置顶] opencv图像分类方法汇总
- 前端知识点汇总
- Android开源项目分类汇总
- Android 开源项目分类汇总
- Android开源项目--分类汇总
- JSP-SERVLET_知识点汇总
- 机器学习常见算法分类汇总(转)
- 机器学习常见算法分类汇总
- Android开源项目分类汇总
- 分类汇总统计的SQL语句 .
- 机器学习常见算法分类汇总
- GitHub上史上最全的Android开源项目分类汇总
- Android开源项目分类汇总
- 正则表达式汇总
- struts2知识点汇总
- 【安卓知识点汇总】Bitmap位图解码
- Android小知识点汇总