y 修饰符让æä»¬è½å¤å¨æºå符串ä¸çæå®ä½ç½®è¿è¡æç´¢ã
ä¸ºäºææ¡ y 修饰符çä½¿ç¨æ¹å¼ï¼è®©æä»¬æ¥çä¸ä¸ªå®é
çä¾åã
æ£å表达å¼ç常è§ä»»å¡ä¹ä¸å°±æ¯âè¯æ³åæâï¼ä¾å¦æä»¬å¾å°äºä¸ä¸ªä»£ç ææ¬ï¼æä»¬éè¦æ¾å°å®çç»æå ç´ ãä¾å¦ï¼HTML ææ ç¾åç¹æ§ï¼attributeï¼ï¼JavaScript ä»£ç æå½æ°ãåéçã
ç¼åè¯æ³åæå¨æ¯ä¸ä¸ªç¹æ®çé¢åï¼æèªå·±çå·¥å ·åç®æ³ï¼æä»¥æä»¬ä¸åè¿å¤çæ·±å ¥ï¼ä½æä¸ä¸ªå ±åçä»»å¡ï¼å¨ç»å®çä½ç½®è¯»åä¸äºå 容ã
ä¾å¦ï¼æä»¬æä¸ä¸ªä»£ç å符串 let varName = "value"ï¼æä»¬éè¦ä»ä¸è¯»ååéåï¼è¿ä¸ªåéåä»ä½ç½® 4 å¼å§ã
æä»¬å°ä½¿ç¨æ£åè¡¨è¾¾å¼ \w+ æ¥æ¥æ¾åéåãå®é
ä¸ï¼JavaScript çåéåéè¦æ´å¤æçæ£åè¡¨è¾¾å¼æè½åç¡®å¹é
ï¼ä½å¨è¿éå¹¶ä¸éè¦ã
- è°ç¨
str.match(/\w+/)å°åªä¼æ¾å°è¯¥è¡ä¸ç第ä¸ä¸ªåè¯ (let)ã䏿¯è¿ä¸ªã - æä»¬å¯ä»¥æ·»å 修饰符
gã使¯è°ç¨str.match(/\w+/g)伿¥æ¾ææ¬ä¸çææåè¯ï¼èæä»¬éè¦ä½ç½®4çä¸ä¸ªåè¯ãåæ ·ï¼ä¸æ¯æä»¬éè¦çã
é£ä¹ï¼å¦ä½å¨ç»å®ä½ç½®åç¡®æç´¢æ£å表达å¼ï¼ã
让æä»¬å°è¯ä½¿ç¨æ¹æ³ regexp.exec(str)ã
å¯¹äºæ²¡æä¿®é¥°ç¬¦ g å y ç regexpï¼æ¤æ¹æ³ä»
æ¥æ¾ç¬¬ä¸ä¸ªå¹é
项ï¼å°±å str.match(regexp) 䏿 ·ã
â¦â¦ä½æ¯å¦ææä¿®é¥°ç¬¦ gï¼é£ä¹å®å°±ä¼ä»åå¨å¨ regexp.lastIndex 屿§ä¸çä½ç½®å¼å§å¨å符串 str ä¸è¿è¡æç´¢ã妿æ¾å°å¹é
项ï¼åå°å¨å¹é
åç«å³å° regexp.lastIndex 设置为索å¼ã
æ¢å¥è¯è¯´ï¼regexp.lastIndex ä½ä¸ºæç´¢çèµ·ç¹ï¼æ¯ä¸ª regexp.exec(str) è°ç¨é½ä¼å°å
¶é置为æ°å¼ï¼â卿å䏿¬¡å¹é
åâï¼ãå½ç¶ï¼è¿åªæ¯å¨æ g 修饰符çæ
åµä¸æä¼è¿æ ·ã
å æ¤ï¼è¿ç»è°ç¨ regexp.exec(str) ä¼ä¸ä¸ªæ¥ä¸ä¸ªå°è¿åå¹é
ã
以䏿¯æ¤ç±»è°ç¨ç示ä¾ï¼
let str = 'let varName'; // 让æä»¬æ¾åºå符串ä¸çææåè¯
let regexp = /\w+/g;
alert(regexp.lastIndex); // 0 (åå§å¼ lastIndex=0)
let word1 = regexp.exec(str);
alert(word1[0]); // let (第ä¸ä¸ªåè¯)
alert(regexp.lastIndex); // 3 (å¹é
åçä½ç½®)
let word2 = regexp.exec(str);
alert(word2[0]); // varName (第äºä¸ªåè¯)
alert(regexp.lastIndex); // 11 (å¹é
åçä½ç½®)
let word3 = regexp.exec(str);
alert(word3); // null (æ²¡ææ´å¤å¹é
项)
alert(regexp.lastIndex); // 0 (æç´¢ç»æåé置索å¼)
æä»¬å¯ä»¥éè¿å¾ªç¯è·åææå¹é ã
let str = 'let varName';
let regexp = /\w+/g;
let result;
while (result = regexp.exec(str)) {
alert( `Found ${result[0]} at position ${result.index}` );
// å¨ä½ç½® 0 åç°äº letï¼ç¶å
// å¨ä½ç½® 4 åç° varName
}
regexp.exec çè¿ç§ä½¿ç¨æ¹å¼å¯ä»¥ä½ä¸º str.matchAll æ¹æ³çæ¿ä»£ï¼å¯ä»¥å¯¹å¹é
è¿ç¨è¿è¡æ´å¤æ§å¶ã
让æä»¬å尿们çä»»å¡ã
æä»¬å¯ä»¥æå¨å° lastIndex 设置为 4ï¼ä»ç»å®çä½ç½®å¼å§æç´¢ï¼
åè¿æ ·ï¼
let str = 'let varName = "value"';
let regexp = /\w+/g; // 没æä¿®é¥°ç¬¦ "g"ï¼lastIndex 屿§ä¼è¢«å¿½ç¥
regexp.lastIndex = 4;
let word = regexp.exec(str);
alert(word); // varName
åå¡ï¼é®é¢è§£å³äºï¼
æä»¬ä»ä½ç½® regexp.lastIndex = 4 å¼å§æç´¢ \w+ã
ç»ææ¯æ£ç¡®çã
â¦â¦ä½æ¯ççï¼æ²¡é£ä¹å¿«ã
请注æï¼regexp.exec è°ç¨ä»ä½ç½® lastIndex å¼å§æç´¢ï¼ç¶åç»§ç»æç´¢ã妿 lastIndex ä½ç½®æ²¡æåè¯ï¼ä½åè¯å¨è¿ä¹åçæä¸ªä½ç½®ï¼é£ä¹åè¯ä¹ä¼è¢«æ¾å°ï¼
let str = 'let varName = "value"';
let regexp = /\w+/g;
// ä»ä½ç½® 3 å¼å§æç´¢
regexp.lastIndex = 3;
let word = regexp.exec(str);
// å¨ä½ç½® 4 æ¾å°å¹é
项
alert(word[0]); // varName
alert(word.index); // 4
å¯¹äºæäºä»»å¡ï¼å æ¬è¯æ³åæï¼è¿æ¯é误çãæä»¬éè¦å¨ææ¬çç»å®ä½ç½®åç¡®å°æ¾å°å¹é ï¼è䏿¯å¨å®ä¹åçæä¸ªä½ç½®ãè¿å°±æ¯ä¿®é¥°ç¬¦ âyâ çç¨éã
修饰符 y 使 regexp.exec 精确æç´¢ä½ç½® lastIndexï¼è䏿¯âä»âå®å¼å§ã
ä¸é¢æ¯å¸¦æä¿®é¥°ç¬¦ y çç¸åæç´¢ï¼
let str = 'let varName = "value"';
let regexp = /\w+/y;
regexp.lastIndex = 3;
alert( regexp.exec(str) ); // nullï¼ä½ç½® 3 æä¸ä¸ªç©ºæ ¼ï¼ä¸æ¯åè¯ï¼
regexp.lastIndex = 4;
alert( regexp.exec(str) ); // varNameï¼å¨ä½ç½® 4 çåè¯ï¼
æ£å¦æä»¬æçå°çï¼æ£åè¡¨è¾¾å¼ /\w+/y å¨ä½ç½® 3 å¤ä¸å¹é
ï¼ä¸åäºä¿®é¥°ç¬¦ g)ï¼ä½å¨ä½ç½® 4 å¤å¹é
ã
è¿ä¸ä»
æ¯æä»¬æéè¦çï¼å½ä½¿ç¨ä¿®é¥°ç¬¦ y æ¶ï¼è¿æä¸ä¸ªéè¦çæ§è½æåã
æ³è±¡ä¸ä¸ï¼æä»¬æä¸ä¸ªå¾é¿çææ¬ï¼å
¶ä¸æ ¹æ¬æ²¡æå¹é
项ãç¶å使ç¨ä¿®é¥°ç¬¦ g è¿è¡æç´¢ï¼ä¼ä¸ç´æç´¢å°ææ¬çæ«å°¾ï¼å¹¶ä¸ä»ä¹ä¹æ¾ä¸å°ï¼è¿å°æ¯ä½¿ç¨ä¿®é¥°ç¬¦ y çæç´¢è±è´¹æ´å¤çæ¶é´ï¼åè
åªæ£æ¥ç¡®åçä½ç½®ã
å¨åè¯æ³åæè¿æ ·çä»»å¡ä¸ï¼é常ä¼å¨ä¸ä¸ªç¡®åçä½ç½®è¿è¡å¤æ¬¡æç´¢ï¼ä»¥æ£æ¥æä»¬å¨é£éæä»ä¹ã使ç¨ä¿®é¥°ç¬¦ y æ¯æ£ç¡®å®ç°åè¯å¥½æ§è½çå
³é®ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼