正则表达式定义方式:
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匹配
g 执行一个全局匹配
m 多行模式
非贪婪模式:/a+/匹配一个或多个字符a,当应用在"aaa"时,与三个a都匹配。
但/a+?/只匹配一个第一个字符a。
几个函数:
·search() - "test".search(/\s*test\s*/g),若参数不是正则表达式,则首先传给RegExp()构造函数,转换成正则表达式,search()不支持全局检索,它忽略了参数g。
·split() - 方法参数可以是字符串也可以是正则表达式
·exec() - 与match()类似,不过它的返回数组类型是相同的
·test() - 比exec()简单些,如果字符串匹配,就返回true,否则返回false
注:具有标识g的模式,lastIndex属性存储了在字符串下一次开始检索的位置,由exec()和test()使用。
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()使用。