正则表达式

正则表达式(regular expression)

JS的RegExp类表示正则表达式,进行强大的模式匹配和文本检索与替换。

var pattern = new RegExp(''s$')  <==>  var pattern = /s$/

字符串类:

  [...]  方括号内任意字符

  [^...]  不在括号内任意字符

  .  除换行符和其他Unicode行终止符之外任意字符

  w  任何ASCII字符组成的单词,等价[a-zA-Z0-9]

  W  任何不是ASCII字符组成的单词,等价[^a-zA-Z0-9]

  s  任何unicode空白符

  S  任何非unicode空白符的字符

  d  任何ASCII数字,等价[0-9]

  D  任何非ASCII数字,等价[^0-9]

  []   退格直接量(特例),用来匹配单词边界,即w和W之间的边界,或开始和结尾

贪婪匹配:

  js默认贪婪匹配

  {n,m}  匹配至少n次,至多m次

  {n,}  至少n次

  {n}  n次

  ?  0次或者1次,等价{0,1}

  +  1次或者多次,等价{1,}

  *  0次或者多次,等价{0,}

  /w{3}d?/  精确匹配3个字母或数字,最后跟0个或1个数字

  *和?允许什么都不匹配

非贪婪匹配:

  在匹配的字符后跟随一个?  {1,5}?

正则表达式总是会找字符串中第一个可能匹配位置,不考虑子串

选择符:|

  匹配顺序自左到右,知道发现可能的匹配项,发现后忽略后面面的匹配

圆括号作用:

  1.把单独的项组合成子表达式,方便使用|,*,+等

  2.从匹配的串中抽出与圆括号的子模式相匹配的部分。  (/[a-Z]+(d+)/),从结果中抽出数字

  3.允许同一个正则式中,后面部分引用前面的子表达式,通过在“”后加数字引用。 1引用第一个括号

    /["'][^'"]*['"]/  可能导致左右引号不搭配

    /(["'])[^'"]*1/  解决引号不搭配问题

  4.(?:.....)只进行分组,但不能被引用,引用时被忽略

指定位置匹配:

  ^  匹配字符串的开头

  $  结尾

    边界

  B  非单词边界

  (?=p)  零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符

  (?!p)  零宽负向先行断言,接下来的字符都不与p匹配

  匹配单词本身:  /java/

修饰符

  /.../i  不区分大小写

  /.../g  全局匹配

  /.../m  多行匹配

  可混搭

用于模式匹配的String方法:

  search():参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,若无则返回-1。若参数不是正则表达式,则首先通过regexp构造函数将其转为正则式

  replace():第一个参数为正则式,第二个为替换的字符串,有/.../g则替换所有,没有就替换第一个。若第一个参数不是正则式,则replace()将直接搜索这个串而不进行regexp()转换

  match():参数是正则式,返回由匹配结果组成的数组,有g则数组包含所有匹配结果

  split():参数是分隔符,将字符串拆分成子串组成的数组

RegExp对象

  构造函数有两个参数,第一个为正则式,第二个可选,为修饰符。注意正则式的需要多一个进行转义

  var a = new RegExp("\d{5}","g");

RegExp两个方法:

  exec():执行模式匹配方法,与String的方法match()类似,但其参数为字符串,无匹配则返回null,否则返回数组。有g需要反复调用exec()获得结果

  test():参数为字符串,查看是否包含匹配,返回true或者false

  regexp的lastIndex要么找出所有匹配自动置0,否则手动置0,不然影响下一次。

原文地址:https://www.cnblogs.com/zawjdbb/p/6479806.html