JavaScript正则表达式(小白收集用)

来源:互联网 发布:武汉优化jw100 编辑:程序博客网 时间:2024/06/07 06:30

1.基本语法

创建正则表达式通过RegExp

var expresiion = / pattern / flags;

flags: g(全局模式)、i(不区分大小写)、m(表示多行)


2.pattern规则

①方括号:用于查找某个范围内的字符

[abc]:查找方括号内的任何字符

[^abc]:查找除了方括号内的任何字符

[0-9]:查找0到9的数字

(red|green|blue):查找任何指定的选项


②元字符:指的是拥有特殊含义的字符。与其他语言的正则表达式一样,模式中使用的所有元字符都必须转义。元字符包括:( [ { \ ^ $ | ) ? * + . ] }

.(点):查找单个字符,除了换行和行结束符。要匹配所有的,使用[\s\S]

\w:查找单词字符(大小写字符、下划线和数字不准确,类似但不等于[a-zA-Z0-9_],这里的单词字符使用Unicode字符,所以俄文字符什么的也是单词字符,并不只是英文字符),大写的\W的表示查找非单词字符

\d:查找数字字符,\D则相反

\s:查找空白字符,\S相反

\b:匹配单词边界,\B相反。看实例吧,/\bm/ 匹配 "moon" 中的 'm'

\n:匹配换行符 \f:换页符 \r:回车键 



③量词

n+:匹配任何包含至少一个n的字符串

n*:匹配任何包含

n?:匹配任何包含零个或一个n的字符串

n{X,Y}:匹配X或Y个n的字符串

n{X,}:匹配X个n的字符串

n$:匹配以n结尾的字符串

^n:匹配以n开始的字符串

?=n:匹配任何其后紧接指定字符串n的字符串,?!n则相反

var str="Is this all there is";var patt1=/is(?! all)/gi;
匹配的是除了this中的is


?:比较特殊,当该字符紧跟在任何一个其他限制符( * + ? {n} {n,} {n,m}后面时,匹配模式是非贪婪的。非贪婪模式下尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能匹配所搜索的字符串。例如,对于字符串"oooo",/o+?/将匹配单个o,而/o+/匹配所有o


非获取匹配的意思是:不会把pattern加入捕获组中

(?:pattern):非获取匹配,

(?=pattern):非获取匹配,正向肯定预查

(?!pattern):非获取匹配,正向否定预查

(?<=pattern):非获取匹配,反向肯定预查,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”

(?<!pattern):非获取匹配,反向否定预查



④RegExp对象语法

属性:

global:是否具有标志g ignoreCase是否具有不区分大小写标志  multiline是否具有多行标志

lastIndex:一个整数,标示下一次匹配的字符位置

source:正则表达式的源文本,返回字符串,按照字面量形式返回


方法:

exec():该方法是专门为捕获组而设计的。

exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null

返回的数组虽然是Array的实例,但包含两个额外的属性:index和input(所以你说Array和Object什么关系)

index:表示匹配项在字符串中的位置 

input:表示用用正则表达式的字符串

在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式没有捕获组,则该数组只包含一项)

上例子

var text = "mom and dad and daddy";var pattern = /mom( and dad( and baby)?)?/gi;var matches = pattern.exec(text);alert(matches.index);   //0alert(matches.input);    // "mom and dad and baby";alert(matches[0]);     //"mom and dad and bay";alert(matches[1]);   " and dad and baby";alert(matches[2]);   " and baby";  //前面有空格
 

还有个要注意的点是:对于exec()方法而言,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项。在不设置全局标志的情况,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用exec()则都会在字符串中继续查找新匹配项


方法:test(),它接受一个字符串参数,在模式与该参数匹配的情况下返回true;否则返回false








0 0