éè¯ä¹ä¸çé常ç®åï¼ä½å®é ä¸å®ä»¬å¯è½å¾æ£æã
妿æä»¬æç®å¯»æ¾æ¯ /\d+/ æ´å¤æçä¸è¥¿ï¼å°±éè¦çè§£æç´¢çå·¥ä½åçã
以æ¥ä¸æ¥çä»»å¡ä¸ºä¾ã
æä¸ä¸ªææ¬ï¼æä»¬éè¦ç¨ä¹¦åå·ï¼Â«...» æ¥ä»£æ¿ææçå¼å· "..."ãå¨è®¸å¤å½å®¶ï¼ä¹¦åå·æ¯æççé¦éã
ä¾å¦ï¼"Hello, world" åºè¯¥åæ «Hello, world»ãè¿æå
¶ä»å¼ç¨ï¼ä¾å¦ âWitam, Åwiat!âï¼æ³¢å
°è¯ï¼æ ãä½ å¥½ï¼ä¸çãï¼ä¸æï¼ï¼ä½å¯¹äºæä»¬çä»»å¡ï¼è®©æä»¬éæ© Â«...» å§ã
é¦å è¦åçæ¯å®ä½å¸¦å¼å·çå符串ï¼ç¶åæ¿æ¢å®ä»¬ã
å /".+"/gï¼ä¸ä¸ªå¼å·ï¼ç¶åæ¯ä¸äºå
容ï¼ç¶åæ¯å¦ä¸ä¸ªå¼å·ï¼è¿æ ·çæ£å表达å¼çèµ·æ¥å¯è½å¾åéï¼ä½äºå®å¹¶é妿¤ï¼
让æä»¬è¯ä¸ä¸ï¼
let regexp = /".+"/g;
let str = 'a "witch" and her "broom" is one';
alert( str.match(regexp) ); // "witch" and her "broom"
â¦â¦å¯ä»¥çåºæ¥å®çè¿è¡ç»æä¸é¢æä¸åï¼
宿²¡ææ¾å°å¹é
项 "witch" å "broom"ï¼èæ¯æ¾å°ï¼"witch" and her "broom"ã
è¿å¯è¢«ç§°ä¸ºâ贪婪æ¯ä¸æ¶ä¹æºâã
贪婪æç´¢
ä¸ºäºæ¥æ¾å°ä¸ä¸ªå¹é é¡¹ï¼æ£å表达å¼å¼æéç¨äºä»¥ä¸ç®æ³ï¼
- 对äºå符串ä¸çæ¯ä¸ä¸ªä½ç½®
- å°è¯å¹é 该ä½ç½®ç模å¼ã
- 妿æªå¹é ï¼å转å°ä¸ä¸ä¸ªä½ç½®ã
è¿æ ·ç®åçæè¿°å¹¶ä¸è½è¯´æ¸
æ¥è¿ä¸ªæ£å表达å¼å¹é
失败çåå ï¼æä»¥è®©æä»¬è¯¦ç»è¯´æä¸ä¸æ¨¡å¼ ".+" æ¯å¦ä½è¿è¡æç´¢çã
-
该模å¼ç第ä¸ä¸ªå符æ¯ä¸ä¸ªå¼å·
"ãæ£å表达å¼å¼æå°è¯å¨æºå符串
a "witch" and her "broom" is oneçä½ç½® 0 æ¾å°å®ï¼ä½é£éæaï¼æä»¥å¹é 失败ãç¶åç»§ç»åè¿ï¼ç§»è³æºå符串ä¸çä¸ä¸ä¸ªä½ç½®ï¼å¹¶å°è¯å¹é 模å¼ä¸ç第ä¸ä¸ªå符ï¼åæ¬¡å¤±è´¥ï¼æç»å¨ç¬¬ä¸ä¸ªä½ç½®å¹é å°äºå¼å·ï¼
-
æ¾å°å¼å·åï¼å¼æå°±å°è¯å»å¹é 模å¼ä¸çå©ä½å符ãå®å°è¯æ¥çå©ä½çå符串æ¯å¦ç¬¦å
.+"ã卿们çç¨ä¾ä¸ï¼æ¨¡å¼ä¸çä¸ä¸ä¸ªå符为
.ï¼ä¸ä¸ªç¹ï¼ãå®è¡¨ç¤ºå¹é é¤äºæ¢è¡ç¬¦ä¹å¤çä»»æåç¬¦ï¼æä»¥å°ä¼å¹é ä¸ä¸ä¸ªå符'w'ï¼ -
ç¶åç±äºéè¯
.+ï¼ç¹ä¼éå¤ãæ£å表达å¼å¼æä¸ä¸ªæ¥ä¸ä¸ªå符å°è¿è¡å¹é ãâ¦â¦ä»ä¹æ¶åä¼ä¸å¹é ï¼ç¹ï¼.ï¼è½å¤å¹é ææåç¬¦ï¼æä»¥åªæå¨ç§»è³å符串æ«å°¾æ¶æåæ¢å¹é ï¼
-
ç°å¨å¼æå®æäºå¯¹é夿¨¡å¼
.+çæç´¢ï¼å¹¶ä¸è¯å¾å¯»æ¾æ¨¡å¼ä¸çä¸ä¸ä¸ªåç¬¦ãæ¯å¼å·"ã使¯æä¸ä¸ªé®é¢ï¼å¯¹å符串çéåå·²ç»ç»æï¼æ²¡ææ´å¤å符äºï¼æ£å表达å¼å¼æç¥éå®ä¸º
.+å¹é 太å¤é¡¹äºï¼æä»¥å¼å§ åæº¯ãæ¢å¥è¯è¯´ï¼å®å»æäºéè¯å¹é 项çæåä¸ä¸ªå符ï¼
ç°å¨å®å设
.+çå¹é å¨å符串çåæ°ç¬¬ä¸ä¸ªå符åçä½ç½®ç»æï¼å¹¶å°è¯ä»è¯¥ä½ç½®å¹é 模å¼çå©ä½é¨åã妿é£éæå¼å·ï¼åæç´¢å°ç»æï¼ä½æåä¸ä¸ªå符æ¯
'e'ï¼æä»¥ä¸å¹é ã -
â¦â¦æä»¥å¼æä¼å°
.+çé夿¬¡æ°åå°ä¸ä¸ªå符ï¼å¼å·
'"'ä¸'n'ä¸å¹é ã -
弿䏿è¿è¡å溯ï¼å®åå°
'.'çé夿¬¡æ°ï¼ç´å°æ¨¡å¼çå ¶ä½é¨åï¼å¨æä»¬çç¨ä¾ä¸æ¯'"'ï¼å¹é å°ç»æï¼ -
å¹é 宿ã
-
æä»¥ï¼ç¬¬ä¸æ¬¡å¹é 项æ¯
"witch" and her "broom"ã妿æ£å表达å¼å ·æä¿®é¥°ç¬¦gï¼åæç´¢å°ä»ç¬¬ä¸ä¸ªå¹é ç»æçå°æ¹ç»§ç»ãå符串is oneçå©ä½é¨åä¸åæå¼å·ï¼å æ¤æ²¡ææ´å¤å¹é 项ã
è¿å¯è½ä¸æ¯æä»¬æææçï¼ä½è¿å°±æ¯å®ç工使¹å¼ã
å¨è´ªå©ªæ¨¡å¼ä¸ï¼é»è®¤æ åµï¼ï¼éè¯é½ä¼å°½å¯è½å¤å°éå¤ã
æ£å表达å¼å¼æå°è¯ç¨ .+ å»å¹é
å°½å¯è½å¤çå符ï¼ç¶å卿¨¡å¼çå
¶ä½é¨åä¸å¹é
æ¶åå°å
¶éä¸ç¼©çã
对äºè¿ä¸ªä»»å¡ï¼æä»¬æ³è¦å¾æ¯å¦ä¸ç§ç»æãè¿ä¹å°±æ¯æ°æ§éè¯æ¨¡å¼çç¨éã
æ°æ§æ¨¡å¼
æ°æ§æ¨¡å¼ä¸çéè¯ä¸è´ªå©ªæ¨¡å¼ä¸çæ¯ç¸åçãå®è¡¨ç¤ºï¼âé夿å°ç次æ°âã
æä»¬å¯ä»¥éè¿å¨éè¯å颿·»å ä¸ä¸ªé®å· '?' æ¥å¯ç¨å®ï¼è¿æ ·å¹é
模å¼å°±åæäº *? æ +?ï¼çè³å° '?' åæ ??ã
è¿ä¹è¯´å§ï¼é常é®å· ? æ¬èº«å°±æ¯ä¸ä¸ªéè¯ï¼0 æ 1ï¼ï¼ä½å¦æå°å
¶æ¾å° å¦ä¸ä¸ªéè¯ï¼çè³æ¯å®èªå·±ï¼åé¢ï¼å°±ä¼æä¸åçå«ä¹ ââ å®å°å¹é
çæ¨¡å¼ä»è´ªå©ªè½¬ä¸ºæ°æ§ã
æ£åè¡¨è¾¾å¼ /".+?"/g è½å¤æé¢æå·¥ä½äºï¼å®æ¾å°äº "witch" å "broom"ï¼
let regexp = /".+?"/g;
let str = 'a "witch" and her "broom" is one';
alert( str.match(regexp) ); // "witch", "broom"
ä¸ºäºæ´æ¸ æ¥å°çè§£è¿ä¸ªååï¼æä»¬æ¥ä¸æ¥æ¥è§£æè¿ä¸ªæç´¢è¿ç¨ã
-
ç¬¬ä¸æ¥æ¯ä¸æ ·çï¼å®å¨ç¬¬ä¸ä¸ªå符çä½ç½®æ¾å°äºæ¨¡å¼çå¼å¤´
'"'ï¼ -
ä¸ä¸æ¥ä¹æ¯ç±»ä¼¼çï¼å¼æä¸º
'.'æ¾å°äºä¸ä¸ªå¹é é¡¹ï¼ -
æ¥ä¸æ¥çæç´¢å°±æäºä¸åäºãå 为æä»¬å¯¹
+?å¯ç¨äºæ°æ§æ¨¡å¼ï¼å¼æä¸ä¼å»å°è¯å¤å¹é ä¸ä¸ªç¹çå¹é å符ï¼èä¼åæ¢å¹¶ç«å³å°è¯å¯¹å©ä½ç模å¼'"'è¿è¡å¹é ï¼å¦æè¿éæä¸ä¸ªå¼å·ï¼æç´¢å°±ä¼åæ¢ï¼ä½è¿éæ¯ä¸ä¸ª
'i'ï¼æä»¥æ²¡æå¹é å°å¼å·ã -
æ¥çï¼æ£å表达å¼å¼æå¢å 对ç¹çéå¤æç´¢æ¬¡æ°ï¼å¹¶ä¸å次å°è¯ï¼
å失败äºãç¶åé夿¬¡æ°ä¸æ¬¡å䏿¬¡çå¢å â¦â¦
-
â¦â¦ç´å°æ¾å°äºæ¨¡å¼ä¸çå©ä½é¨åçå¹é 项ï¼
-
æ¥ä¸æ¥çæç´¢ä»å½åå¹é çç»å°¾å¼å§ï¼å¹¶äº§çäºä¸ä¸ä¸ªå¹é 项ï¼
å¨è¿ä¸ªä¾åä¸ï¼æä»¬çå°äºæ°æ§æ¨¡å¼ç +? æ¯ææ ·å·¥ä½çãéè¯ *? å ?? ç工使¹å¼ç±»ä¼¼ ââ æ£å表达å¼å¼æä»
卿¨¡å¼çå
¶ä½é¨åæ æ³å¨ç»å®ä½ç½®å¹é
æ¶å¢å é夿¬¡æ°ã
æ°æ§æ¨¡å¼ä»
对带æ ? çéè¯å¯ç¨
å ¶å®éè¯ä¾æ§ä¿æè´ªå©ªæ¨¡å¼ã
ä¾å¦ï¼
alert( "123 456".match(/\d+ \d+?/) ); // 123 4
-
模å¼
\d+å°è¯å¹é å°½å¯è½å¤çæ°åï¼è´ªå©ªæ¨¡å¼ï¼ï¼å æ¤å¨å®æ¾å°123æ¶åæ¢ï¼å 为ä¸ä¸ä¸ªåç¬¦ä¸ºç©ºæ ¼' 'ã -
ç¶å模å¼ä¸æä¸ä¸ªç©ºæ ¼ï¼æ£å¥½å¹é ã
-
ç¶åæ¯
\d+?ãæ¤éè¯å¤äºæ°æ§æ¨¡å¼ï¼æä»¥å®å¹é ä¸ä¸ªæ°å4åå¼å§å°è¯å»æ£æ¥æ¨¡å¼çå©ä½é¨åæ¯å¦å¹é ãâ¦â¦ä½æ¯å¨
\d+?ä¹å没æå ¶å®å 容äºãæ°æ§æ¨¡å¼å¨ä¸å¿ è¦çæ åµä¸ä¸ä¼éå¤ä»»ä½ä¸è¥¿ã模å¼ç»æï¼æä»¬æ¾å°äºå¹é 项
123 4ã
ç°å¨æ£å表达å¼å¼æä¼éè¿ä¼åå é¨ç®æ³æ¥æåæçãæä»¥å®ä»¬ç工使¹å¼åææè¿°çç®æ³å¯è½ç¥æä¸åã
ä½å¦æåªæ¯ä¸ºäºäºè§£æ£å表达å¼çå·¥ä½åçåå¦ä½æå»ºæ£åè¡¨è¾¾å¼æä»¬ä¸éè¦ç¥éè¿äºãå®ä»¬ä» ç¨äºå é¨ç®æ³ä¼åã
å¤æçæ£åè¡¨è¾¾å¼æ¯å¾é¾ä¼åçï¼å æ¤æç´¢çè¿ç¨ä¹å¯ä»¥å®å ¨æç §æè¿°çæ¹å¼è¿è¡ã
æ¿ä»£æ¹æ³
ä½¿ç¨æ£å表达å¼ï¼é常æä¸æ¢ä¸ç§æ¹å¼å¯ä»¥åç¸åçäºã
卿们çä¾åä¸ï¼æä»¬å¯ä»¥å¨ä¸å¯ç¨æ°æ§æ¨¡å¼çæ
åµä¸ä½¿ç¨æ£åè¡¨è¾¾å¼ "[^"]+" æ¾å°å¸¦å¼å·çå符串ï¼
let regexp = /"[^"]+"/g;
let str = 'a "witch" and her "broom" is one';
alert( str.match(regexp) ); // "witch", "broom"
æ£åè¡¨è¾¾å¼ "[^"]+" ç»åºäºæ£ç¡®çæ¡ï¼å ä¸ºå®æ¥æ¾ä¸ä¸ªå¼å· '"' åè·ä¸ä¸ªææ´å¤éå¼å· [^"] çå符ï¼ç¶åæ¯ç»æçå¼å·ã
å½å¼æå¯»æ¾ [^"]+ æ¶ï¼å®ä¼å¨å¹é
å°ç»æçå¼å·æ¶åæ¢éå¤ï¼è¿æ ·å°±å®æäºã
请注æï¼è¿ä¸ªé»è¾å¹¶ä¸è½åä»£æ°æ§éè¯ï¼
å®ä»¬æ¯ä¸åçãæä»¬å¨ä¸åæ åµä¸å¯è½ä¼éè¦ä½¿ç¨å°å ¶ä¸çä¸ä¸ªæå¦ä¸ä¸ªã
让æä»¬åæ¥çä¸ä¸ªä½¿ç¨æ°æ§éè¯å¤±è´¥è使ç¨è¿ç§åä½è½è·å¾é¢æç»æçä¾åã
ä¾å¦ï¼æä»¬æ³è¦æ¾å° <a href="..." class="doc"> å½¢å¼ç带æä»»æ href ç龿¥ã
该使ç¨åªä¸ªæ£å表达å¼å¢ï¼
é¦å
å¯è½ä¼æ³å°ï¼/<a href=".*" class="doc">/gã
éªè¯ä¸ä¸ï¼
let str = '...<a href="link" class="doc">...';
let regexp = /<a href=".*" class="doc">/g;
// ææï¼
alert( str.match(regexp) ); // <a href="link" class="doc">
â¦â¦ä½å¦æææ¬ä¸æå¤ä¸ªé¾æ¥å¢ï¼
let str = '...<a href="link1" class="doc">... <a href="link2" class="doc">...';
let regexp = /<a href=".*" class="doc">/g;
// è¤ï¼ä¸ä¸ªå¹é
é¡¹ä¸æä¸¤ä¸ªé¾æ¥ï¼
alert( str.match(regexp) ); // <a href="link1" class="doc">... <a href="link2" class="doc">
ç°å¨è¿ä¸ªç»ææ¯éçï¼åå 䏿们ç âwitchesâ 示ä¾ç¸åãéè¯ .* å ç¨äºå¤ªå¤å符ã
å¹é ç»æå¦ä¸ï¼
<a href="....................................." class="doc">
<a href="link1" class="doc">... <a href="link2" class="doc">
让æä»¬å¯ç¨æ°æ§éè¯ .*? æ¥ä¿®æ¹æ¨¡å¼ï¼
let str = '...<a href="link1" class="doc">... <a href="link2" class="doc">...';
let regexp = /<a href=".*?" class="doc">/g;
// æ£ç¡®äºï¼
alert( str.match(regexp) ); // <a href="link1" class="doc">, <a href="link2" class="doc">
ç°å¨è½æåäºï¼æä¸¤ä¸ªå¹é 项ï¼
<a href="....." class="doc"> <a href="....." class="doc">
<a href="link1" class="doc">... <a href="link2" class="doc">
â¦â¦ä½æ¯è®©æä»¬ç¨å¦å¤ä¸ä¸ªææ¬æ¥æµè¯ççï¼
let str = '...<a href="link1" class="wrong">... <p style="" class="doc">...';
let regexp = /<a href=".*?" class="doc">/g;
// é误çå¹é
ï¼
alert( str.match(regexp) ); // <a href="link1" class="wrong">... <p style="" class="doc">
ç°å¨å®å¹é
éäºãå¹é
项ä¸ä»
å
æ¬äºä¸ä¸ªé¾æ¥ï¼è¿å
æ¬äºå®åé¢çå¾å¤ææ¬ï¼å
æ¬ <p...>ã
为ä»ä¹ï¼
åå å¦ä¸ï¼
- é¦å
ï¼æ£å表达å¼å¯»æ¾é¾æ¥çå¼å§ï¼
<a href="ã - ç¶åå®å¯»æ¾
.*?ï¼åä¸ä¸ªåç¬¦ï¼æ°æ§çï¼ï¼ï¼ç¶åæ£æ¥å符串çå©ä½é¨åæ¯å¦ä¸æ¨¡å¼çå©ä½é¨åå¹é ï¼æªå¹é ï¼ã - ç¶åååä¸ä¸ªå符å°
.*?ä¸ï¼ä»¥æ¤ç±»æ¨â¦â¦ç´å°æç»å°è¾¾" class="doc">ã
ä½é®é¢æ¯ï¼è¿å·²ç»è¶
åºäºé¾æ¥ <a...>ï¼å·²ç»å¨å¦ä¸ä¸ªæ ç¾ <p> ä¸äºãè¿ä¸æ¯æä»¬æ³è¦çã
è¿æ¯ä¸å¹é 项卿æ¬ä¸å¯¹é½ç示ä¾ï¼
<a href="..................................." class="doc">
<a href="link1" class="wrong">... <p style="" class="doc">
æä»¥ï¼æä»¬éè¦æ¨¡å¼å¯»æ¾ <a href="...something..." class="doc">ï¼ä½è´ªå©ªæ¨¡å¼åæ°æ§æ¨¡å¼é½æé®é¢ã
æ£ç¡®çåä½å¯ä»¥æ¯è¿æ ·çï¼href="[^"]*"ãå®ä¼è·å href ç¹æ§ä¸çææå符ç´å°æè¿çå¼å·ï¼æ£å¥½ç¬¦åæä»¬çéæ±ã
举个ä¾åï¼
let str1 = '...<a href="link1" class="wrong">... <p style="" class="doc">...';
let str2 = '...<a href="link1" class="doc">... <a href="link2" class="doc">...';
let regexp = /<a href="[^"]*" class="doc">/g;
// ææï¼
alert( str1.match(regexp) ); // nullï¼æ å¹é
项ï¼è¿æ¯å¯¹ç
alert( str2.match(regexp) ); // <a href="link1" class="doc">, <a href="link2" class="doc">
æ»ç»
éè¯æä¸¤ç§å·¥ä½æ¨¡å¼ï¼
- 贪婪模å¼
- é»è®¤æ
åµä¸ï¼æ£å表达å¼å¼æä¼å°è¯å°½å¯è½å¤å°éå¤éè¯å符ãä¾å¦ï¼
\d+伿¶èææå¯è½çå符ã彿 æ³æ¶èæ´å¤ï¼å¨å°¾ç«¯æ²¡ææ´å¤çæ°åæåç¬¦ä¸²ï¼æ¶ï¼ç¶åå®åå¹é 模å¼çå©ä½é¨åãå¦ææ²¡æå¹é ï¼ååå°éå¤ç次æ°ï¼å溯ï¼ï¼å¹¶å次å°è¯ã - æ°æ§æ¨¡å¼
- éè¿å¨éè¯åæ·»å é®å·
?æ¥å¯ç¨ãæ£å表达å¼å¼æå°è¯å¨æ¯æ¬¡éå¤éåå符ä¹åå¹é 模å¼çå ¶ä½é¨åã
æ£å¦æä»¬æè§ï¼æ°æ§æ¨¡å¼å¹¶ä¸æ¯è´ªå©ªæç´¢çâçµä¸¹å¦è¯âãå¦ä¸ç§æ¹å¼æ¯ä½¿ç¨æé¤é¡¹âå¾®è°â贪婪æç´¢ï¼å¦æ¨¡å¼ "[^"]+"ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼