正则表达式详解

来源:互联网 发布:刘彻爱过卫子夫 知乎 编辑:程序博客网 时间:2024/06/07 10:50
正则表达式定义方式:
1、直接量创建:var pattern = /\s*test\s*/gi;
2、构造函数创建:var pattern = new RegExp("\\s*test\\s*", "gi");
区别:通过直接量创建的是固定模式的模式,使用\表示转移序列,而当要动态构造模式时只能使用构造函数创建,使用\\替换所有\字符
正则的字符类:
字符                    匹配
[...]                   位于括号内的任意字符
[^...]                  不在括号内的任意字符
.                       除换行符和其它Unicode行终止符之外的任意字符
\w                      任意ASCII单字字符,等价于[a-zA-Z0-9_]
\W                      任意非ASCII单字字符,等价于[^a-zA-Z0-9_]
\s                      任何Unicode空白符
\S                      任何非Unicode空白字符,\w和\S不同
\d                      数字,等价于[0-9]
\D                      除了数字外的任何字符
\b                      匹配单词边界
\B                      匹配非单词边界
{n,m}                   匹配次数在n与m之间
{n,}                    匹配n次以上
{n}                     匹配n次
?                       匹配0次或1次
+                       匹配1次或多次
*                       匹配0次或多次
\n                      和第n个匹配字符匹配,组号是从左到右的左括号数
|                       选择
(?=p)                   正前向声明,要求接下来的字符与模式p匹配

(?!p)                   反前向声明,要求接下来的字符不与模式p匹配

(...)    匹配,并将结果保存到自动命名的结果数组中

(?<result>...)  匹配,并将结果保存到命名为result的结果数组中

(?:...) 匹配,但不保存匹配结果

i                       执行不区分大小写
g                       执行一个全局匹配
m                       多行模式


非贪婪模式:/a+/匹配一个或多个字符a,当应用在"aaa"时,与三个a都匹配。
但/a+?/只匹配一个第一个字符a。


几个函数:
·search() - "test".search(/\s*test\s*/g),若参数不是正则表达式,则首先传给RegExp()构造函数,转换成正则表达式,search()不支持全局检索,它忽略了参数g。

·replace() - "test".replace(/\s*test\s*/g, "*"),若第一个参数是字符,则直接检索那个字符。最重要的是replace()第二个参数可以是函数,该函数可以动态的计算替换的字符串。

eg:

var str = '<dl><dt>{title}</dt><dd>{content}</dd></dl>';function render(tpl, data) {     str.replace(/{(.*)}/igm, function($, $1) {          //其中第一个参数$是目标匹配串          //第二个参数$1是第一个子匹配串,以此类推,后面的参数依次为$i           return data[$1] ? data[$1]: $;     });}

·match() - 唯一一个参数就是正则表达式,返回的是包含匹配结果的数组,a[0]存放的是完整匹配,a[1]存放的是第一个括号匹配子串...无匹配返回null
·split() - 方法参数可以是字符串也可以是正则表达式
·exec() - 与match()类似,不过它的返回数组类型是相同的
·test() - 比exec()简单些,如果字符串匹配,就返回true,否则返回false
注:具有标识g的模式,lastIndex属性存储了在字符串下一次开始检索的位置,由exec()和test()使用。

原创粉丝点击