Baseline Widely available
exec()
æ¹æ³å¨ä¸ä¸ªæå®åç¬¦ä¸²ä¸æ§è¡ä¸ä¸ªæç´¢å¹é
ãè¿åä¸ä¸ªç»ææ°ç»æ null
ã
const regex1 = RegExp("foo*", "g");
const str1 = "table football, foosball";
let array1;
while ((array1 = regex1.exec(str1)) !== null) {
console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`);
// Expected output: "Found foo. Next starts at 9."
// Expected output: "Found foo. Next starts at 19."
}
è¯æ³ åæ°
str
è¦å¹é æ£å表达å¼çå符串ã
妿å¹é
失败ï¼exec()
æ¹æ³è¿å null
ï¼å¹¶å°æ£å表达å¼ç lastIndex
é置为 0ã
妿å¹é
æåï¼exec()
æ¹æ³è¿åä¸ä¸ªæ°ç»ï¼å¹¶æ´æ°æ£å表达å¼å¯¹è±¡ç lastIndex
屿§ãå®å
¨å¹é
æåçææ¬å°ä½ä¸ºè¿åæ°ç»ç第ä¸é¡¹ï¼ä»ç¬¬äºé¡¹èµ·ï¼åç»æ¯é¡¹é½å¯¹åºä¸ä¸ªå¹é
çæè·ç»ãæ°ç»è¿å
·æä»¥ä¸é¢å¤ç屿§ï¼
index
å¹é å°çå符ä½äºåå§å符串çåºäº 0 çç´¢å¼å¼ã
input
å¹é çåå§å符串ã
groups
ä¸ä¸ªå½åæè·ç»å¯¹è±¡ï¼å
¶é®æ¯åç§°ï¼å¼æ¯æè·ç»ãè¥æ²¡æå®ä¹å½åæè·ç»ï¼å groups
çå¼ä¸º undefined
ãåé
æè·ç»ä»¥äºè§£æ´å¤ä¿¡æ¯ã
indices
å¯é
æ¤å±æ§ä»
å¨è®¾ç½®äº d
æ å¿ä½æ¶åå¨ã宿¯ä¸ä¸ªæ°ç»ï¼å
¶ä¸æ¯ä¸ä¸ªå
ç´ è¡¨ç¤ºä¸ä¸ªåå符串çè¾¹çãæ¯ä¸ªåå符串å¹é
æ¬èº«å°±æ¯ä¸ä¸ªæ°ç»ï¼å
¶ä¸ç¬¬ä¸ä¸ªå
ç´ è¡¨ç¤ºèµ·å§ç´¢å¼ï¼ç¬¬äºä¸ªå
ç´ è¡¨ç¤ºç»æç´¢å¼ã
å¨è®¾ç½®äº global
æ sticky
æ å¿ä½çæ
åµä¸ï¼å¦ /foo/g
æ /foo/y
ï¼ï¼JavaScript RegExp
å¯¹è±¡æ¯æç¶æçãå®ä»¬ä¼å°ä¸æ¬¡æåå¹é
åçä½ç½®è®°å½å¨ lastIndex
屿§ä¸ãä½¿ç¨æ¤ç¹æ§ï¼exec()
å¯ç¨æ¥å¯¹å个å符串ä¸ç夿¬¡å¹é
ç»æè¿è¡éæ¡çéåï¼å
æ¬æè·å°çå¹é
ï¼ï¼èç¸æ¯ä¹ä¸ï¼ String.prototype.match()
åªä¼è¿åå¹é
å°çç»æã
å¨ä½¿ç¨ exec()
æ¶ï¼global
æ å¿ä½ä¸ä¼å¨ sticky
æ å¿ä½è¢«è®¾ç½®æ¶çæï¼è match()
å§ç»ä¼è®¾ç½® sticky
æ å¿ä½ã
exec()
æ¯æ£å表达å¼çåå§æ¹æ³ã许å¤å
¶ä»çæ£åè¡¨è¾¾å¼æ¹æ³ä¼å¨å
é¨è°ç¨ exec()
ââå
æ¬ä¸äºåç¬¦ä¸²æ¹æ³ä¹ä¼è°ç¨ exec()
ï¼å¦ [Symbol.replace]()
ãè½ç¶ exec()
æ¬èº«é常强大èåææï¼ä½å®é常ä¸è½ææ¸
æ¥å°è¡¨ç¤ºè°ç¨çç®çã
RegExp.prototype.test()
æ¹æ³ä»£æ¿ãString.prototype.match()
æ¹æ³ä»£æ¿ãæ¤å¤ï¼String.prototype.matchAll()
å
è®¸ä½ å¯¹å¹é
项è¿è¡è¿ä»£ï¼è¿æå©äºç®åå¹é
å符串çå¤ä¸ªé¨åï¼å¸¦æå¹é
ç»ï¼ãString.prototype.search()
æ¹æ³ä»£æ¿ãèè以ä¸ç¤ºä¾ï¼
// Match "quick brown" followed by "jumps", ignoring characters in between
// Remember "brown" and "jumps"
// Ignore case
const re = /quick\s(?<color>brown).+?(jumps)/dgi;
const result = re.exec("The Quick Brown Fox Jumps Over The Lazy Dog");
ä¸è¡¨ååºè¿ä¸ªèæ¬çè¿åå¼ï¼result
ï¼ï¼
[0]
"Quick Brown Fox Jumps"
[1]
"Brown"
[2]
"Jumps"
index
4
indices
[[4, 25], [10, 15], [20, 25]]
groups: { color: [10, 15 ]}
input
"The Quick Brown Fox Jumps Over The Lazy Dog"
groups
{ color: "brown" }
å¦å¤ï¼ç±äºæ£åè¡¨è¾¾å¼æ¯å
¨å±çï¼global
ï¼ï¼re.lastIndex
ä¼è¢«è®¾ç½®ä¸º 25
ã
彿£å表达å¼è®¾ç½® g
æ å¿ä½æ¶ï¼å¯ä»¥å¤æ¬¡æ§è¡ exec
æ¹æ³æ¥æ¥æ¾åä¸ä¸ªå符串ä¸çæåå¹é
ãå½ä½ è¿æ ·åæ¶ï¼æ¥æ¾å°ä»æ£å表达å¼ç lastIndex
屿§æå®çä½ç½®å¼å§ãï¼test()
ä¹ä¼æ´æ° lastIndex
屿§ï¼ã注æï¼å³ä½¿åæ¬¡æ¥æ¾çåç¬¦ä¸²ä¸æ¯åæ¥æ¾å符串æ¶ï¼lastIndex
ä¹ä¸ä¼è¢«éç½®ï¼å®ä¾æ§ä¼ä»è®°å½ç lastIndex
å¼å§ã
ä¾å¦ï¼ä½ 使ç¨ä¸é¢çèæ¬ï¼
const myRe = /ab*/g;
const str = "abbcdefabh";
let myArray;
while ((myArray = myRe.exec(str)) !== null) {
let msg = `Found ${myArray[0]}. `;
msg += `Next match starts at ${myRe.lastIndex}`;
console.log(msg);
}
èæ¬è¿è¡ç»æå¦ä¸ï¼
Found abb. Next match starts at 3 Found ab. Next match starts at 9
è¦åï¼ ä»¥ä¸æ åµä¼å¯¼è´å¹é åæä¸ä¸ªæ é循ç¯ï¼
RegExp
æé 彿°ï¼æ¾å¨ while
æ¡ä»¶è¡¨è¾¾å¼éãç±äºæ¯æ¬¡è¿ä»£æ¶ lastIndex
ç屿§é½è¢«éç½®ãg
ï¼æ å¿ä½ï¼å¦å lastIndex
ä¸ä¼è¢«æ´æ°ã/^/gm
ï¼ï¼è¯·æå¨éå¢ lastIndex
ï¼ä»¥é¿å
å
¶å§ç»å¡å¨ç¸åçä½ç½®ãä½ ä¹å¯ä»¥å°è¿ç±»çä»£ç æ¿æ¢ä¸º String.prototype.matchAll()
以éä½åºéçå¯è½æ§ã
RegExp
åé¢éä½¿ç¨ exec()
ä½ ä¹å¯ä»¥ç´æ¥ä½¿ç¨ exec()
è䏿¯å建ä¸ä¸ª RegExp
对象ï¼
const matches = /(hello \S+)/.exec("This is a hello world!");
console.log(matches[1]);
è¿è¡ä¸é¢ç代ç ï¼æ§å¶å°ä¼è¾åº 'hello world!'
å符串ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4