æ£åè¡¨è¾¾å¼æ¯æä¾äºä¸ç§å¨ææ¬ä¸è¿è¡æç´¢åæ¿æ¢çå¼ºå¤§çæ¹å¼ç模å¼ã
å¨ JavaScript ä¸ï¼æä»¬å¯ä»¥éè¿ RegExp 对象使ç¨å®ä»¬ï¼ä¹å¯ä»¥ä¸åç¬¦ä¸²æ¹æ³ç»å使ç¨ã
æ£å表达å¼
æ£å表达å¼ï¼å¯å«ä½ âregexpâï¼æ âregâï¼ç± æ¨¡å¼ åå¯éç 修饰符 ç»æã
æä¸¤ç§å建æ£å表达å¼å¯¹è±¡çè¯æ³ã
è¾é¿ä¸ç¹çè¯æ³ï¼
regexp = new RegExp("pattern", "flags");
è¾çä¸ç¹çè¯æ³ï¼ä½¿ç¨æçº¿ "/"ï¼
regexp = /pattern/; // 没æä¿®é¥°ç¬¦
regexp = /pattern/gmi; // 带æä¿®é¥°ç¬¦ gãm å iï¼åé¢ä¼è®²å°ï¼
æçº¿ /.../ åè¯ JavaScript æä»¬æ£å¨å建ä¸ä¸ªæ£å表达å¼ãå®çä½ç¨ä¸å符串çå¼å·ä½ç¨ç¸åã
å¨è¿ä¸¤ç§æ
åµä¸ï¼regexp é½ä¼æä¸ºå
建类 RegExp çä¸ä¸ªå®ä¾ã
è¿ä¸¤ç§è¯æ³ä¹é´ç主è¦åºå«å¨äºï¼ä½¿ç¨æçº¿ /.../ çæ¨¡å¼ä¸å
许æå
¥è¡¨è¾¾å¼ï¼å¦å¸¦æ ${...} çå符串模æ¿ï¼ã宿¯å®å
¨éæçã
卿们åä»£ç æ¶å°±ç¥éæ£åè¡¨è¾¾å¼æ¶åä¼ä½¿ç¨æçº¿çæ¹å¼ ââ è¿æ¯æå¸¸è§çæ
åµãè彿们éè¦ä»å¨æçæçå符串å建ä¸ä¸ªæ£åè¡¨è¾¾å¼æ¶ï¼æ´å¸¸ä½¿ç¨ new RegExpãä¾å¦ï¼
let tag = prompt("What tag do you want to find?", "h2");
â
let regexp = new RegExp(`<${tag}>`); // 妿å¨ä¸æ¹è¾å
¥å° prompt ä¸ççæ¡æ¯ "h2"ï¼åä¸ /<h2>/ ç¸å
修饰符
æ£å表达å¼å¯è½æå½±åæç´¢ç»æç修饰符ã
å¨ JavaScript ä¸ï¼åªæ 6 个修饰符ï¼
i- ä½¿ç¨æ¤ä¿®é¥°ç¬¦åï¼æç´¢æ¶ä¸åºå大å°åï¼
Aåaä¹é´æ²¡æåºå«ï¼è¯·åè§ä¸é¢ç示ä¾ï¼ã g- ä½¿ç¨æ¤ä¿®é¥°ç¬¦åï¼æç´¢æ¶ä¼å¯»æ¾ææçå¹é 项 ââ æ²¡æå®ï¼åä» è¿å第ä¸ä¸ªå¹é 项ã
m- å¤è¡æ¨¡å¼ï¼è¯¦è§ éç¹ ^ $ çå¤è¡æ¨¡å¼ï¼ä¿®é¥°ç¬¦ "m"ï¼ã
s- å¯ç¨ âdotallâ æ¨¡å¼ï¼å
许ç¹
.å¹é æ¢è¡ç¬¦\nï¼å¨ å符类 ä¸æè¯¦ç»ä»ç»ï¼ã u- å¼å¯å®æ´ç Unicode æ¯æã该修饰符è½å¤æ£ç¡®å¤ç代ç对ãè¯¦è§ Unicodeï¼ä¿®é¥°ç¬¦ "u" åç±» \p{...}ã
y- ç²æ»ï¼Stickyï¼æ¨¡å¼ï¼å¨ææ¬ä¸çç¡®åä½ç½®æç´¢ï¼è¯¦è§ ç²æ§ä¿®é¥°ç¬¦ "y"ï¼å¨ä½ç½®å¤æç´¢ï¼
æ¥ä¸æ¥ï¼åé¨åçé¢è²å¦ä¸ï¼ â
- æ£åè¡¨è¾¾å¼ ââ
red - åç¬¦ä¸²ï¼æä»¬æç´¢çå°æ¹ï¼ââ
blue - ç»æ ââ
green
æç´¢ï¼str.match
æ£å¦å颿æå°çï¼å°æ£å表达å¼ååç¬¦ä¸²æ¹æ³ç»åä¸èµ·ä½¿ç¨ã
str.match(regexp) æ¹æ³å¨å符串 str ä¸å¯»æ¾ regexp çææå¹é
项ã
宿 3 ç§å·¥ä½æ¨¡å¼ï¼
-
妿æ£å表达å¼å ·æä¿®é¥°ç¬¦
gï¼å®è¿åä¸ä¸ªç±ææå¹é é¡¹æææçæ°ç»ï¼let str = "We will, we will rock you"; alert( str.match(/we/gi) ); // We,weï¼ç±ä¸¤ä¸ªå¹é çåå符串ææçæ°ç»ï¼è¯·æ³¨æï¼
Weåweé½è¢«æ¾å°äºï¼å 为修饰符iä½¿å¾æ£å表达å¼å¨è¿è¡æç´¢æ¶ä¸åºå大å°åã -
å¦ææ²¡æè¿æ ·ç修饰符ï¼å®åä¼ä»¥æ°ç»å½¢å¼è¿å第ä¸ä¸ªå¹é 项ï¼ç´¢å¼
0å¤ä¿åç宿´çå¹é 项ï¼è¿åçç»æç屿§ä¸è¿æä¸äºå ¶ä»è¯¦ç»ä¿¡æ¯ï¼let str = "We will, we will rock you"; let result = str.match(/we/i); // 没æä¿®é¥°ç¬¦ g alert( result[0] ); // Weï¼ç¬¬ä¸ä¸ªå¹é é¡¹ï¼ alert( result.length ); // 1 // 详ç»ä¿¡æ¯ï¼ alert( result.index ); // 0ï¼å¹é 项çä½ç½®ï¼ alert( result.input ); // We will, we will rock youï¼æºå符串ï¼å¦ææ£å表达å¼ä¸æä¸é¨åå 容被å 卿¬å·éï¼é£ä¹è¿åçæ°ç»å¯è½ä¼æ
0以å¤çç´¢å¼ãæä»¬å°å¨ æè·ç» ä¸å¦ä¹ è¿é¨åç¸å ³å 容ã -
æåï¼å¦ææ²¡æå¹é 项ï¼åè¿å
nullï¼æ 论æ¯å¦æä¿®é¥°ç¬¦gï¼ãè¿æ¯ä¸ä¸ªé常éè¦çç»å¾®å·®å«ãå¦ææ²¡æå¹é é¡¹ï¼æä»¬ä¸ä¼æ¶å°ä¸ä¸ªç©ºæ°ç»ï¼èæ¯ä¼æ¶å°
nullãå¿äºè¿ä¸ç¹å¯è½ä¼å¯¼è´é误ï¼ä¾å¦ï¼let matches = "JavaScript".match(/HTML/); // = null if (!matches.length) { // Error: Cannot read property 'length' of null alert("Error in the line above"); }妿æä»¬å¸æç»æå§ç»æ¯ä¸ä¸ªæ°ç»ï¼æä»¬å¯ä»¥è¿æ ·åï¼
let matches = "JavaScript".match(/HTML/) || []; if (!matches.length) { alert("No matches"); // ç°å¨å¯ä»¥äº }
æ¿æ¢ï¼str.replace
str.replace(regexp, replacement) æ¹æ³ä½¿ç¨ replacement æ¿æ¢å¨å符串 str 䏿¾å°ç regexp çå¹é
项ï¼å¦æå¸¦æä¿®é¥°ç¬¦ g åæ¿æ¢ææå¹é
项ï¼å¦ååªæ¿æ¢ç¬¬ä¸ä¸ªï¼ã
ä¾å¦ï¼
// 没æä¿®é¥°ç¬¦ g
alert( "We will, we will".replace(/we/i, "I") ); // I will, we will
// 带æä¿®é¥°ç¬¦ g
alert( "We will, we will".replace(/we/ig, "I") ); // I will, I will
第äºä¸ªåæ°æ¯å符串 replacementãæä»¬å¯ä»¥å¨å
¶ä¸ä½¿ç¨ç¹æ®çå符ç»åæ¥å¯¹å¹é
项è¿è¡æå
¥ï¼
| ç¬¦å· | 卿¿æ¢å符串ä¸çè¡ä¸º |
|---|---|
$& |
æå ¥æ´ä¸ªå¹é 项 |
$` |
æå ¥å符串ä¸å¹é 项ä¹åçå符串é¨å |
$' |
æå ¥å符串ä¸å¹é 项ä¹åçå符串é¨å |
$n |
妿 n æ¯ä¸ä¸ª 1-2 ä½çæ°åï¼åæå
¥ç¬¬ n 个åç»çå
容ï¼è¯¦è§ æè·ç» |
$<name> |
æå
¥å¸¦æç»å® name çæ¬å·å
çå
容ï¼è¯¦è§ æè·ç» |
$$ |
æå
¥å符 $ |
带æ $& çä¸ä¸ªç¤ºä¾ï¼
alert( "I love HTML".replace(/HTML/, "$& and JavaScript") ); // I love HTML and JavaScript
æµè¯ï¼regexp.test
regexp.test(str) æ¹æ³å¯»æ¾è³å°ä¸ä¸ªå¹é
项ï¼å¦ææ¾å°äºï¼åè¿å trueï¼å¦åè¿å falseã
let str = "I love JavaScript";
let regexp = /LOVE/i;
alert( regexp.test(str) ); // true
å¨åé¢çç« èä¸ï¼æä»¬ä¼å¦ä¹ æ´å¤æ£å表达å¼ï¼éè¿æ´å¤çä¾åï¼ä¹ä¼éå°å ¶ä»çæ¹æ³ã
å ³äºè¿äºæ¹æ³ç宿´ä¿¡æ¯è¯·è§ æ£å表达å¼ååç¬¦ä¸²çæ¹æ³ã
æ»ç»
- æ£å表达å¼ç±æ¨¡å¼åå¯éæ©ä¿®é¥°ç¬¦ææï¼
gãiãmãuãsåyã - 没æä¿®é¥°ç¬¦åç¹æ®ç¬¦å·ï¼ç¨åæä»¬ä¼å¦å°ï¼ï¼é£ä¹æ£å表达å¼çæç´¢ååå符串çæç´¢ç¸åã
str.match(regexp)æ¹æ³å¯»æ¾å¹é 项ï¼å¦æå¸¦æä¿®é¥°ç¬¦gï¼åä¼è¿åææå¹é 项ï¼å¦ååªä¼è¿å第ä¸ä¸ªå¹é 项ãstr.replace(regexp, replacement)æ¹æ³ä½¿ç¨replacementæ¿æ¢regexpçå¹é 项ï¼å¦æå¸¦æä¿®é¥°ç¬¦gï¼å伿¿æ¢ææå¹é 项ï¼å¦ååªä¼æ¿æ¢ç¬¬ä¸ä¸ªå¹é 项ãregexp.test(str)æ¹æ³ç¨äºæµè¯ï¼å¦ææ¾å°è³å°ä¸ä¸ªå¹é 项åè¿åtrueï¼å¦åè¿åfalseã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼