定点:指正则表达式的一个虚拟的锚点,字符会从正则表达式的lastIndex属性指定 的位置开始匹配。
格式:/正则匹配规则/y
示例
- 常规
var re1 = /foo/, str = "++foo++"; re1.lastIndex; // 0 re1.test( str ); // tue re1.lastIndex; // 0 re1.lastIndex = 4; // lastIndex 修改为 4 re1.test( str ); // true,忽略lastIndex还是从0开始匹配 re1.lastIndex; // 4 - 定点标示
var re1 = /foo/y, // <-- 注意有y! str = "++foo++"; re1.lastIndex; // 0 re1.test( str ); // false 匹配失败后 lastIndex会被重置为0 re1.lastIndex; // 0 re1.lastIndex = 2; // 从 能匹配到(2)的位置开始匹配 re1.test( str ); // true re1.lastIndex; // 5 匹配成功后 lastIndex会被往后挪 re1.test( str ); // false 匹配失败后 lastIndex会被重置为0 re1.lastIndex; // 0
match中的用法
var re = /\d+\.\s(.*?)(?:\s|$)/y;
str = "1. foo 2. bar 3. baz";
str.match( re ); // [ "1. foo ", "foo" ]
re.lastIndex; // 7-- 匹配成功后 lastIndex会被往后挪
str.match( re ); // [ "2. bar ", "bar" ]
re.lastIndex; // 14-- 匹配成功后 lastIndex会被往后挪
str.match( re ); // ["3. baz", "baz"]
re.lastIndex; // 20-- 匹配成功后 lastIndex会被往后挪
str.match( re ); // null 未匹配到
re.lastIndex; // 匹配失败后 lastIndex会被重置为0
exec中的类似用法
var re = /o+./g, // <-- 注意g!
str = "foot book more";
re.exec( str ); // ["oot"]
re.lastIndex; // 4
re.exec( str ); // ["ook"]
re.lastIndex;// 9
re.exec( str ); // ["or"]
re.lastIndex; // 13
re.exec( str ); // null 未匹配到
re.lastIndex; 匹配失败后 lastIndex会被重置为0
注意
y 加上 ^ 再加上 lastIndex > 0 是一个不兼容的组合,总是会导致匹配失败。 示例
var re = /^f\w{2}/y,
str = "foofaa";
re.test(str) // true 匹配成功后 lastIndex会被往后挪
re.lastIndex; // 3
re.test( str ); // false ^表示输入的起始处,re.lastIndex为3,匹配就会失败。
re.lastIndex; // 0 匹配失败后 lastIndex会被重置为0
对比
var re = /f\w{2}/y, // <-- 注意没有^!
str = "foofaa";
re.test(str) // true 匹配成功后 lastIndex会被往后挪
re.lastIndex; // 3
re.test( str ); // true
re.lastIndex; // 6 匹配成功后 lastIndex会被往后挪