执行“粘性”搜索 从当前开始的比赛 在目标字符串中的位置,使用 你好。
我不太明白。
答案 0 :(得分:42)
正则表达式对象具有lastIndex
属性,根据g
(全局)和y
(粘性)标志,它以不同的方式使用。 y
(粘性)标记告诉正则表达式在lastIndex
处查找匹配项,而lastIndex
处的仅(不在字符串中更早或更晚)。
示例价值1024字:
var str = "a0bc1";
// Indexes: 01234
var rexWithout = /\d/;
var rexWith = /\d/y;
// Without:
rexWithout.lastIndex = 2; // (This is a no-op, because the regex
// doesn't have either g or y.)
console.log(rexWithout.exec(str)); // ["0"], found at index 1, because without
// the g or y flag, the search is always from
// index 0
// With, unsuccessful:
rexWith.lastIndex = 2; // Says to *only* match at index 2.
console.log(rexWith.exec(str)); // => null, there's no match at index 2,
// only earlier (index 1) or later (index 4)
// With, successful:
rexWith.lastIndex = 1; // Says to *only* match at index 1.
console.log(rexWith.exec(str)); // => ["0"], there was a match at index 1.
// With, successful again:
rexWith.lastIndex = 4; // Says to *only* match at index 4.
console.log(rexWith.exec(str)); // => ["1"], there was a match at index 4.
.as-console-wrapper {
max-height: 100% !important;
}
兼容性说明:
Firefox的SpiderMonkey JavaScript引擎多年来一直有y
标志,但在ES2015(2015年6月)之前它不是规范的一部分。此外,很长一段时间Firefox在^
断言方面有a bug in the handling of the y
flag,但它在Firefox 43(有bug)和Firefox 47(没有)之间修复。很老版本的Firefox(比如说3.6)确实有y
并且没有错误,所以这是后来发生的回归(未定义y
标志的行为),然后得到固定的。
答案 1 :(得分:3)
答案 2 :(得分:0)
你可以在这里找到一个例子:
除了恕我直言,这个例子应该是
var regex = /^(\S+) line\n?/y;
而不是
var regex = /(\S+) line\n?/y;
因为使用这一行,无论你说
,代码都会给出相同的结果var regex = /(\S+) line\n?/y;
或
var regex = /(\S+) line\n?/g;