您的位置:首页 > 其它

正则表达式的知识点分类汇总

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:断言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式