美文网首页
知识点总结-正则表达式

知识点总结-正则表达式

作者: 我是小韩 | 来源:发表于2016-06-22 15:26 被阅读0次

1.声明方法

  • new RegExp()
var a= new RegExp('xyz');   //等同于/xyz/
var b= new RegExp("\\s");   //等同于/\s/
var c =new RegExp("\s");     //等同于/s/  这里注意 使用new声明正则的时候如果存在转译就会消耗一个"\"符号
  • 直接书写
var a=/xyz/;
var b=/\s/;

2.正则对象的属性和方法

  • 修饰符属性
    与修饰符有关的属性,返回一个布尔值
    >ignoreCase :表示不区分大小写
    >global :表示是否全局匹配
    >multiline :表示是否多行匹配
var a=/xyz/igm;
a.ignoreCase // true;
a.global         //true;
a.mulitline      //true;
  • 另外有一些与修饰符无关的属性,主要有两个
    >lastindex 下一次匹配的位置,要跟修饰符g一起用
    >source 正则的字符串形式
var a= /xyz/igm;
var b=/\s/igm;
a.lastindex;        //0 从头开始
b.source  ;       //"\s"
  • 方法
    • test() 返回Boolean值 表示当前正则是否能够匹配字符串
      >正则中没有修饰符g,则只匹配一次
/x/.test("_x_x");
/y/.test("_x_x");

>正则中有修饰符g ,则多次匹配

var a=/x/g;
var s="_x_x";
a.test(s);       //true;
a.lastIndex;  //2;
a.test(s);      //true;
a.lastIndex   //4;
  • exec(): 如果发现匹配,则返回一个数组,如果没有匹配 则返回null;
var s="_x_x";
/x/.exec(s);     //["x"]
/y/.exec(s)       //null

>使用exec()如果正则中有() 则含有组匹配 如果成功匹配 则返回的数组中第一个值是匹配成功的值,第二个值组内匹配的值 ,如果存在多个组匹配则数组长度+1,位置依次类推。

var a = /_(x)/;
a.exec("_x_x")  //["_x","x"]
var b=/a(b)(c)/;
b.exec("abc")   //  ["abc",b,c]

> 使用exec()返回的数组中有两个属性 一个是input 另一个是index

var a=/a(b+)a/g;
var s="_abbba_aba"
var a1=a.exec(s);
a1.index   //1 从字符串第二位成功匹配
a1.input   //"_abbba_aba" 匹配的原字符串

> 如果正则中含有修饰符g则可以多次使用exec()进行匹配

var a=/a(b+)a/g;
var s="_abbba_aba"
var a1=a.exec(s);
console.log(a1);            //["abbba","bbb"]
console.log(a.lastIndex);   //    6
var a2=a.exec(s);
console.log(a2);            //["aba","b"]
console.log(a.lastIndex);   //  10
var a3=a.exec(s);
console.log(a3);           // null             本次的匹配位置是10 字符串最大索引是9 所以null
console.log(a.lastIndex); //undefined
var a4=a.exec(s);
console.log(a4.index);                        //index=1 重新开始匹配
console.log(a3);           //["abbba","bbb"]       
console.log(a.lastIndex); //   6

3.字符串的属性和方法

  • search
    >如果匹配成功则返回第一个满足匹配字符串的位置,如果没有匹配成功则返回-1
var s="_x_x";
s.match(/x/);       //1
s.match(/y/);       //-1
  • match
    >如果不带修饰符g 则返回第一次匹配值组成的数组 如果没有成功则返回null
var s="_x_x";
s.match(/x/);     //["x"]
s.match(/y/);      //null

>如果带修饰符g 则返回所有匹配组成的数组

var s="_x_x";
s.match(/x/g);   //["x","x"]

>如果存在组匹配,如果成功匹配,数组的第一个值是匹配结果,第二个值是组内匹配结果,依次类推。

var s="_abba_aba";
s.match(/a(b+)a/);  ["abba","bb"]
  • split
    >函数调用:str.split(separator, [limit])
    返回值是一个数组。参数第一个参数可以是正则,第二个参数可以限定返回数组的长度,
var s="a, b,  c,d"
var arr=s.split(/,\s*/);           //其中\s* 代表匹配0到多个空格
console.log(arr)                     //["a", "b", "c", "d"]
var arr2=s.split(/,\s*/,2)      
console.log(arr2)                  //["a", "b"]
  • replace
    >函数调用:str.replace(search, replacement)replace()返回值是一个新的字符串。
    >>参数第一个值可以是正则 正则可以带修饰符g,带g的情况下会做全局匹配替换
var s="aaa"
var s1=s.replace(/a/,"b")         //s1="baa"
var s2=s.replace(/a/g,"b")       //s2="bbb"

>>参数第二个值可以是替换的字符串,也可以是$符号组成的参数,也可以是函数
$符号
$& 指代匹配的子字符串。
$` 指代匹配结果前面的文本。
$' 指代匹配结果后面的文本。 //其中'符号需要转译 $'
$n 指代匹配成功的第n组内容,n是从1开始的自然数。
$$ 指代美元符号$

var s1="hello world".replace(/(\w+) (\w+)/,"$2 $1");   //"world hello"
var s2=('abc').replace(/b/,"[$`-$&-$\']")                 //"a[a-b-c]c"      

function

var s='123';
var s2=s.replace(/\d/g,function(match){
  return match*2;
});                                                          //s2="246";

4.常用的一些写法

<pre>
\d :匹配数字 相当于[0-9]
\w:匹配字母数字下划线相当于[A-Za-z0-9_]
\s :匹配空格(包括制表符、空格符、断行符等) 相当于[\t\n\r\v\f]
[a-zA-Z0-9]: 匹配所有字母和数字

5.特殊字符

\cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。
[\b] 匹配退格键(U+0008),不要与\b混淆。
\n 匹配换行键。
\r 匹配回车键。
\t 匹配制表符tab(U+0009)。
\v 匹配垂直制表符(U+000B)。
\f 匹配换页符(U+000C)。
\0 匹配null字符(U+0000)。
\xhh 匹配一个以两位十六进制数表示的字符。
\uhhhh 匹配一个以四位十六进制数表示的unicode字符。

6.贪婪模式与非贪婪模式(+、*、?)

+符号和*符号默认是尽可能的匹配更多的字符,这就是贪婪模式。
如果在后面加上问号,就会变成一旦满足条件后就不再匹配 这就是非贪婪模式。
*?:表示某个模式出现0次或多次,匹配时采用非贪婪模式
+?:表示某个模式出现1次或多次,匹配时采用非贪婪模式。

/a+/.exec("aaa");           //["aaa"]
/a+?/.exec("aaa);          //["a"]       //满足有一个a即可
/a+?b/.exec("aab")         //["aab"]    //满足一个或者多个a后面有一个b
/a*?b/.exec("aab");           //["aab"]   //满足0个或者多个a后面有一个b
/a*?b/.exec("b")                 //["b"]     //没有a直接返回b

6.组匹配

  • 定义:就匹配就是用括号包裹起来形成一个整体
var s="abcabc"
s.match(/abc+/);              //["abc"]      没有括号 只有c受到了加号的影响
s.match(/(abc)+/);            //["abcabc", "abc"]    
  • 组匹配可以使用\n来替代组中的内容,还可以嵌套使用
var s="abc_cab";
/(..)(.)_\2\1/.test(s);      //其中\2代表的是ab\1代表的是c
var s="abc_ab_abc";
/((..).)_\2_\1/.test(s);     //其中\2代表的是ab \1代表的是abc
  • 组匹配最大的应用就是用来匹配web标签
var tag=/^<(\w+)>([^<]*)<\/\1>$/;
var match=tag.exec("<h1>我是头标题</h1>")   //["<h1>我是头标题</h1>", "h1", "我是头标题"]
var html = '<b class="hello">Hello</b><i>world</i>';
var tag = /<(\w+)([^>]*)>(.*)<\/\1>/g;
var match1=tag.exec(html);            //["<b class="hello">Hello</b>", "b", " class="hello"", "Hello"]
var match2=tag.exec(html);            //["<i>world</i>", "i", "", "world"]

7.组匹配的其他用法

  • 非捕获组 (?:x) 功能与普通的组匹配一样,但是使用exec和字符串的match的时候不会返回组中的内容
var match1=/(?:.)b(.)/.exec("abc");    //["abc", "c"]
var match2="foolfool".match(/(?:foo)+(.)/);    //["fool", "l"]
  • 先行断言x(?=y ) 就是x必须是在y的前面 y不会返回
/\d+(?=%)/.exec("99%");   //["99"]
  • 先行否定断言x(?!y) 就是x不能在y的前面 也不会返回
/\d+(?![.])/.exec(3.14);   //[14]

相关文章

  • 正则知识点总结

    title: 正则知识点总结date: 2018-01-04 23:03:51tags: 正则表达式 intro ...

  • JavaScript 正则表达式 RegExp

    作为一个用了就忘,再用再看的知识点,仅以此总结表达敬意——to 正则表达式 ( ̄▽ ̄)" 正则表达式——维基百科:...

  • 关于正则表达式

    刷题的时候发现了关于正则表达式的题,完全忘干净了好好总结一下 正则基础知识点 元字符 元字符是构造正则表达式的一种...

  • 正则表达式

    作者: 张敏;标签: 正则表达式 正则表达式 前言 知识点 什么是正则表达式? 为什么要用正则表达式? 复杂的字...

  • 知识点总结-正则表达式

    1.声明方法 new RegExp() 直接书写 2.正则对象的属性和方法 修饰符属性与修饰符有关的属性,返回一个...

  • 正则表达式 知识点总结

    1- \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么? \d表示:数...

  • 22年护考备考资料

    护考历年常考知识点总结 护考历年常考知识点总结

  • vue(2) - 收藏集 - 掘金

    javascript 正则表达式总结 - 前端 - 掘金为什么要使用正则表达式 正则表达式通过由普通字符和特殊字符...

  • 正则表达式---常用表达式

    正则表达式常用表达式 正则知识点 正则表达式在Python中的应用 match() 方法match只能匹配以某个字...

  • 表单验证笔记

    一:知识点; 正则表达式创建方式: A. var re = new RegExp('a','i') B . var...

网友评论

      本文标题:知识点总结-正则表达式

      本文链接:https://www.haomeiwen.com/subject/ymiwdttx.html