厦门建设网站的公司,php除了写网站吗,上传文章的网站,阳江房产网签查询系统文章目录RegExpRegExp 对象的属性compiletestexecString一共有 7 个与正则表达式式相关的方法#xff0c;这些方法分别来自于 RegExp 与 String 对象。RegExp
RegExp 对象表示正则表达式, 主要用于对字符串执行模式匹配.
语法: new RegExp(pattern[, flags])
参数 pattern …
文章目录RegExpRegExp 对象的属性compiletestexecString一共有 7 个与正则表达式式相关的方法这些方法分别来自于 RegExp 与 String 对象。RegExp
RegExp 对象表示正则表达式, 主要用于对字符串执行模式匹配.
语法: new RegExp(pattern[, flags])
参数 pattern 是一个字符串, 指定了正则表达式字符串或其他的正则表达式对象。
参数 flags 是一个可选的字符串包含属性 g、i 和 m分别用于指定全局匹配、区分大小写的匹配和多行匹配。如果 pattern 是正则表达式而不是字符串则必须省略该参数。
var pattern [0-9];
// 构造正则表达式对象
var reg new RegExp(pattern,g);
var reg new RegExp([0-9],g);
// 也可以直接输入字面量
var reg /[0-9]/g;RegExp 对象的属性
包含如下属性
实例属性描述global是否包含全局标志(true/false)ignoreCase是否包含区分大小写标志(true/false)multiline是否包含多行标志(true/false)source返回创建RegExp对象时指定的表达式文本字符串形式lastIndex表示原字符串中匹配的字符串最后一个字符后面的位置默认为0flags(ES6)返回正则表达式的修饰符sticky(ES6)是否设置了y(粘连)修饰符(true/false)
compile
compile 方法用于在执行过程中改变和重新编译正则表达式。
语法compile(pattern[, flags])
参数介绍请参考上述 RegExp 构造器用法如下
var reg new RegExp(abc, gi);
var reg2 reg.compile(new abc, g);
console.log(reg); // /new abc/g
console.log(reg2); // undefined可见 compile 方法会改变原正则表达式对象并重新编译而且它的返回值为空。
test
test 方法用于检测一个字符串是否匹配某个正则规则只要是字符串中含有与正则规则匹配的文本该方法就返回 true否则返回 false。
语法test(string)
用法如下
console.log(/[0-9]/.test(abc123)); // true
console.log(/[0-9]/.test(abc)); // false以上字符串”abc123” 包含数字故 test 方法返回 true而字符串”abc” 不包含数字故返回 false。
实际上如果正则表达式带有全局标志(带有参数 g)时test 方法还受正则对象的 lastIndex 属性影响如下
var reg /[a-z]/; // 正则不带全局标志
console.log(reg.test(abc)); // true
console.log(reg.test(de)); // true
var reg /[a-z]/g; // 正则带有全局标志g
console.log(reg.test(abc)); // true成功匹配到字符串 abc
console.log(reg.lastIndex); // 3, 最近 1 次匹配到的字符串最后 1 个字符后面的位置。下次运行 test 时正则引擎将从索引为 3 的位置开始查找
console.log(reg.test(de)); // falsereg 对象的属性 lastIndex 的值为 3所以只会从位置 3 开始尝试匹配而字符串“de”根本就没有位置 3所以直接匹配失败exec
语法exec(string)
exec() 方法的功能非常强大它是一个通用的方法而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
如果 exec() 找到了匹配的文本则返回一个结果数组。否则返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本如果有的话第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本如果有的话以此类推。除了数组元素和 length 属性之外exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出在调用非全局的 RegExp 对象的 exec() 方法时返回的数组与调用方法 String.match() 返回的数组是相同的。
但是当 RegExpObject 是一个全局正则表达式时exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时在匹配后它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时它将返回 null并把 lastIndex 属性重置为 0。
var reg /([a-z])/gi,string World Internet Conference;
var array reg.exec(string);
console.log(array); // [World, World, index: 0, input: World Internet Conference]
console.log(RegExp.$1); // World
console.log(reg.lastIndex); // 5, 刚好等于 array.index array[0].length如上代码可以看到 reg.lastIndex array.index匹配开始的位置 array[0].length匹配字符串的长度。
随着检索继续, array.index 的值会变成下个匹配字符串的开始位置, 相应地 reg.lastIndex 的值会变成下个匹配字符串的结束位置。我们也可以通过反复调用 exec 方法来遍历源字符串中所有的匹配字符串直到 exec 方法再也匹配不到文本时它将返回 null并把 reg.lastIndex 属性重置为 0。
array reg.exec(string);
console.log(array);//[Internet, Internet, index: 6, input: World Internet Conference]
console.log(reg.lastIndex);//14array reg.exec(string);
console.log(array);//[Conference, Conference, index: 15, input: World Internet Conference]
console.log(reg.lastIndex);//25array reg.exec(string);
console.log(array);//null
console.log(reg.lastIndex);//0有的时候我们需要手动将 lastIndex 的值手动设置为 0如下例子
var reg /[0-9]/g,str1 123abc,str2 123456;
reg.exec(str1);
console.log(reg.lastIndex);//3
var array reg.exec(str2);
console.log(array);//[456, index: 3, input: 123456]以上代码正则式在匹配字符串 str2 时期望的正确结果应该是“123456”因此建议在第二次执行 exec 方法前增加一句 reg.lastIndex 0;。
String
matchsearchreplacesplit 方法请参考字符串API。