RegExp.prototype.sticky
åºçº¿
广æ³å¯ç¨
èª 2016å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
sticky 屿§åæ äºæç´¢æ¯å¦å
·æç²æ§ï¼ä»
仿£å表达å¼ç lastIndex 屿§è¡¨ç¤ºçç´¢å¼å¤æç´¢ï¼ãsticky æ¯æ£å表达å¼å¯¹è±¡çåªè¯»å±æ§ã
å°è¯ä¸ä¸
const str1 = "table football";
const regex1 = new RegExp("foo", "y");
regex1.lastIndex = 6;
console.log(regex1.sticky);
// Expected output: true
console.log(regex1.test(str1));
// Expected output: true
console.log(regex1.test(str1));
// Expected output: false
RegExp.prototype.sticky ç屿§ç¹æ§ | |
|---|---|
| å¯å | å¦ |
| 坿䏾 | å¦ |
| å¯é ç½® | æ¯ |
æè¿°
sticky ç弿¯ Boolean ï¼å¹¶å¨ y æ å¿ä½¿ç¨æ¶ä¸ºç; å¦å为åãy æ å¿æç¤ºï¼ä»
仿£å表达å¼ç lastIndex 屿§è¡¨ç¤ºçç´¢å¼å¤ä¸ºç®æ å符串å¹é
ï¼å¹¶ä¸ä¸ä¼å°è¯ä»åç»ç´¢å¼å¹é
ï¼ã妿ä¸ä¸ªè¡¨è¾¾å¼åæ¶æå®äº sticky å globalï¼å
¶å°ä¼å¿½ç¥ global æ å¿ã
ä½ ä¸è½ç´æ¥æ´æ¹è¿ä¸ªå±æ§ï¼å®æ¯åªè¯»çã
示ä¾
>使ç¨å¸¦ sticky æ å¿çæ£å表达å¼
var str = "#foo#";
var regex = /foo/y;
regex.lastIndex = 1;
regex.test(str); // trueï¼è¯æ³¨ï¼æ¤ä¾ä»
å½ lastIndex = 1 æ¶å¹é
æåï¼è¿å°±æ¯ sticky çä½ç¨ï¼
regex.lastIndex = 5;
regex.test(str); // falseï¼lastIndex 被 sticky æ å¿èèå°ï¼ä»è导è´å¹é
失败ï¼
regex.lastIndex; // 0ï¼å¹é
失败åéç½®ï¼
éå®ç sticky æ å¿
ç«çç SpiderMonkey 弿çå ä¸ªçæ¬æä¸ä¸ª bugï¼å¤ç ^ æè¨å sticky æ å¿æ¶ï¼ä¼å
许使ç¨äº sticky æ å¿ç表达å¼ä» ^ æè¨å¼å§å¹é
ï¼è¿æ¯ä¸å¯¹çãè¿ä¸ª bug æ¯å¨ Firefox 3.6 ä¹åçæä¸ªçæ¬å¼å
¥çï¼which had the sticky flag but not the bugï¼å¹¶äº 2015 å¹´ä¿®å¤ãå¯è½æ£å 为è¿ä¸ª bugï¼ES2015 è§è ç¹å«æåºï¼
å½ä½¿ç¨å¸¦æ
yæ è¯çå¹é æ¨¡å¼æ¶ï¼^ æè¨æ»æ¯ä¼å¹é è¾å ¥çå¼å§ä½ç½®æè ï¼å¦ææ¯å¤è¡æ¨¡å¼ï¼æ¯ä¸è¡çå¼å§ä½ç½®ã
æ£ç¡®è¡ä¸ºç示ä¾ï¼
var regex = /^foo/y;
regex.lastIndex = 2;
regex.test("..foo"); // false - ç´¢å¼ 2 䏿¯å符串çå¼å§
var regex2 = /^foo/my;
regex2.lastIndex = 2;
regex2.test("..foo"); // false - ç´¢å¼ 2 䏿¯å符串æè¡çå¼å§
regex2.lastIndex = 2;
regex2.test(".\nfoo"); // true - ç´¢å¼ 2 æ¯è¡çå¼å§
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-get-regexp.prototype.sticky> |