js引用类型之RegExp
正则表达式表示方法
模式 + 3 个标志的组合体。
即:var expression = /pattern/flags;
flag:g,i,m三个标志之一(全局模式,不缺分大小写模式,多行模式)
定义方式
1.字面量定义:var pattern1 = /[bc]at/i;
2.构造函数定义:var pattern1 = new RegExp(“[bc]at”,”i”);
attention:构造函数创造正则对象的时候,需要常规的字符转移规则(在前面加反斜杠\)
RegExp属性
这几个属性在正则表达式中可以获取,其实没多大必要
1. global 表示是否设置了g标志
2. ignoreCase 表示是否设置了i标志
3. multiline 表示是否设置了m标志
4. lastIndex 表示开始搜索下一个匹配项的字符位置,从0算起
5.source正则表达式的字符串表示,按照字面量模式返回而非传入构造函数的字符串模式返回。(important)
var pattern1 = new RegExp("\\[bc\\]at","i");
alert(pattern1.source);//"\[bc\]at"
RegExp方法
- exec()方法
接收值:一个参数,就是应用模式的字符串
返回值:包含第一个匹配项信息的数组 (1.index匹配项在字符串中的位置2.input应用正则表达式的字符串),或者在没有匹配项的情况下返回null
–此数组的第 0 个元素是与正则表达式相匹配的文本,
第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话)
第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话)
以此类推。
举例:
var text = "mom and dad and baby";
var pattern = /mom( and dad ( and baby)?)?/gi;
var match = pattern.exec(text);
alert(match.index);//0
alert(match.input);//"mom and dad and baby"
alert(match[0]);//"mom and dad and baby"
alert(match[1]);//"and dad and baby"
alert(match[2]);//"and baby"
exec()属性就算是设置了g标志,每次也就返回一个匹配项。
在不设置g标志的情况下,同个字符串上调用exec()始终返回第一个匹配项的信息。
var text = "cat pat fat";
var pattern = /.at/;
var match = pattern.exec(text);
alert(match.index);//0
alert(match.input);//cat pat fat
alert(match[0]);//cat
alert(pattern.lastIndex);//0
var match = pattern.exec(text);
alert(match.index);//0
alert(match.input);//cat pat fat
alert(match[0]);//cat
alert(pattern.lastIndex);//0
设置全局标志g情况下,每次调用exec()会返回一个新的匹配项的信息。
var text = "cat pat fat";
var pattern = /.at/g;
var match = pattern.exec(text);
alert(match.index);//0
alert(match.input);//cat pat fat
alert(match[0]);//cat
alert(pattern.lastIndex);//3
var match = pattern.exec(text);
alert(match.index);//4
alert(match.input);//cat pat fat
alert(match[0]);//pat
alert(pattern.lastIndex);//7
test()方法
接收值:搜索字符串指定的值,
返回值:根据结果并返回真或假。
var str = 'runoob';
var patt1 = new RegExp('\\w', 'g'); // 有转义作为正则表达式处理
var patt2 = new RegExp('\w', 'g'); // 无转义作为字符串处理
var patt3 =/\w+/g; // 与 patt1 效果相同
document.write(patt1.test(str)) //输出 true
document.write("<br>")
document.write(patt2.test(str)) //输出 false
document.write("<br>")
document.write(patt3.test(str)) //输出 true