卿¬æä¸ï¼æä»¬å°æ·±å ¥ä»ç»ä¸æ£å表达å¼é å使ç¨çåç§æ¹æ³ã
str.match(regexp)
str.match(regexp) æ¹æ³å¨å符串 str 䏿¥æ¾ regexp çå¹é
项ã
宿 3 ç§æ¨¡å¼ï¼
-
妿
regexpä¸å¸¦æä¿®é¥°ç¬¦gï¼åå®ä»¥æ°ç»çå½¢å¼è¿å第ä¸ä¸ªå¹é 项ï¼å ¶ä¸å 嫿è·ç»å屿§indexï¼å¹é 项çä½ç½®ï¼ãinputï¼è¾å ¥å符串ï¼çäºstrï¼ï¼let str = "I love JavaScript"; let result = str.match(/Java(Script)/); alert( result[0] ); // JavaScriptï¼å®å ¨å¹é ï¼ alert( result[1] ); // Scriptï¼ç¬¬ä¸ä¸ªåç»ï¼ alert( result.length ); // 2 // å ¶ä»ä¿¡æ¯ï¼ alert( result.index ); // 7ï¼å¹é ä½ç½®ï¼ alert( result.input ); // I love JavaScriptï¼æºåç¬¦ä¸²ï¼ -
妿
regexp带æä¿®é¥°ç¬¦gï¼åå®å°è¿åä¸ä¸ªå 嫿æå¹é é¡¹çæ°ç»ï¼ä½ä¸å 嫿è·ç»åå ¶å®è¯¦ç»ä¿¡æ¯ãlet str = "I love JavaScript"; let result = str.match(/Java(Script)/g); alert( result[0] ); // JavaScript alert( result.length ); // 1 -
å¦ææ²¡æå¹é 项ï¼åæ 论æ¯å¦å¸¦æä¿®é¥°ç¬¦
gï¼é½å°è¿ånullãè¿æ¯ä¸ä¸ªéè¦çç»å¾®å·®å«ãå¦ææ²¡æå¹é é¡¹ï¼æä»¬å¾å°ç䏿¯ä¸ä¸ªç©ºæ°ç»ï¼èæ¯
nullãå¿è®°è¿ä¸ç¹å¾å®¹æåºéï¼ä¾å¦ï¼let str = "I love JavaScript"; let result = str.match(/HTML/); alert(result); // null alert(result.length); // Error: Cannot read property 'length' of null妿æä»¬å¸æç»ææ¯ä¸ä¸ªæ°ç»ï¼æä»¬å¯ä»¥è¿æ ·åï¼
let result = str.match(regexp) || [];
str.matchAll(regexp)
æ¹æ³ str.matchAll(regexp) æ¯ str.match çâæ´æ°ãæ¹è¿âçåä½ã
å®ä¸»è¦ç¨æ¥æç´¢ææç»çææå¹é 项ã
ä¸ match ç¸æ¯æ 3 个åºå«ï¼
- å®è¿åä¸ä¸ªå
å«å¹é
项çå¯è¿ä»£å¯¹è±¡ï¼è䏿¯æ°ç»ãæä»¬å¯ä»¥ç¨
Array.fromå°å ¶è½¬æ¢ä¸ºä¸ä¸ªå¸¸è§æ°ç»ã - æ¯ä¸ªå¹é
项å以ä¸ä¸ªå
嫿è·ç»çæ°ç»å½¢å¼è¿åï¼è¿åæ ¼å¼ä¸ä¸å¸¦ä¿®é¥°ç¬¦
gçstr.matchç¸åï¼ã - å¦ææ²¡æç»æï¼åè¿åçæ¯ä¸ä¸ªç©ºçå¯è¿ä»£å¯¹è±¡è䏿¯
nullã
ç¨æ³ç¤ºä¾ï¼
let str = '<h1>Hello, world!</h1>';
let regexp = /<(.*?)>/g;
let matchAll = str.matchAll(regexp);
alert(matchAll); // [object RegExp String Iterator]ï¼ä¸æ¯æ°ç»ï¼èæ¯ä¸ä¸ªå¯è¿ä»£å¯¹è±¡
matchAll = Array.from(matchAll); // ç°å¨æ¯æ°ç»äº
let firstMatch = matchAll[0];
alert( firstMatch[0] ); // <h1>
alert( firstMatch[1] ); // h1
alert( firstMatch.index ); // 0
alert( firstMatch.input ); // <h1>Hello, world!</h1>
妿æä»¬ç¨ for..of æ¥éå matchAll çå¹é
项ï¼é£ä¹æä»¬å°±ä¸éè¦ Array.from äºã
str.split(regexp|substr, limit)
ä½¿ç¨æ£å表达å¼ï¼æåå符串ï¼ä½ä¸ºåé符æ¥åå²å符串ã
æä»¬å¯ä»¥ç¨ split æ¥åå²å符串ï¼åè¿æ ·ï¼
alert('12-34-56'.split('-')) // æ°ç» ['12', '34', '56']
ä½åæ ·ï¼æä»¬ä¹å¯ä»¥ç¨æ£å表达å¼ï¼
alert('12, 34, 56'.split(/,\s*/)) // æ°ç» ['12', '34', '56']
str.search(regexp)
æ¹æ³ str.search(regexp) è¿å第ä¸ä¸ªå¹é
项çä½ç½®ï¼å¦ææ²¡æ¾å°ï¼åè¿å -1ï¼
let str = "A drop of ink may make a million think";
alert( str.search( /ink/i ) ); // 10ï¼ç¬¬ä¸ä¸ªå¹é
ä½ç½®ï¼
éè¦éå¶ï¼search ä»
æ¥æ¾ç¬¬ä¸ä¸ªå¹é
项ã
妿æä»¬éè¦å
¶ä»å¹é
项çä½ç½®ï¼ååºä½¿ç¨å
¶ä»æ¹æ³ï¼ä¾å¦ç¨ str.matchAll(regexp) æ¥æ¾ææä½ç½®ã
str.replace(str|regexp, str|func)
è¿æ¯ç¨äºæç´¢åæ¿æ¢çéç¨æ¹æ³ï¼æ¯ææç¨çæ¹æ³ä¹ä¸ã宿¯æç´¢åæ¿æ¢å符串çç士ååã
æä»¬å¯ä»¥å¨ä¸ä½¿ç¨æ£å表达å¼çæ åµä¸ä½¿ç¨å®æ¥æç´¢åæ¿æ¢åå符串ï¼
// ç¨åå·æ¿æ¢è¿å符
alert('12-34-56'.replace("-", ":")) // 12:34-56
ä¸è¿æä¸ä¸ªé·é±ã
å½ replace ç第ä¸ä¸ªåæ°æ¯å符串æ¶ï¼å®åªæ¿æ¢ç¬¬ä¸ä¸ªå¹é
项ã
ä½ å¯ä»¥å¨ä¸é¢ç示ä¾ä¸çå°ï¼åªæç¬¬ä¸ä¸ª "-" è¢«æ¿æ¢ä¸ºäº ":"ã
å¦è¦æ¾å°ææçè¿åç¬¦ï¼æä»¬ä¸åºè¯¥ç¨å符串 "-"ï¼èåºä½¿ç¨å¸¦ g ä¿®é¥°ç¬¦çæ£åè¡¨è¾¾å¼ /-/gï¼
// å°ææè¿åç¬¦é½æ¿æ¢ä¸ºåå·
alert( '12-34-56'.replace( /-/g, ":" ) ) // 12:34:56
第äºä¸ªåæ°æ¯æ¿æ¢å符串ãæä»¬å¯ä»¥å¨å ¶ä¸ä½¿ç¨ç¹æ®å符ï¼
| ç¬¦å· | æ¿æ¢å符串ä¸çè¡ä¸º |
|---|---|
$& |
æå ¥æ´ä¸ªå¹é 项 |
$` |
æå ¥å符串ä¸å¹é 项ä¹åçå符串é¨å |
$' |
æå ¥å符串ä¸å¹é 项ä¹åçå符串é¨å |
$n |
妿 n æ¯ä¸ä¸ª 1-2 ä½çæ°åï¼åæå
¥ç¬¬ n 个åç»çå
容ï¼è¯¦è§ æè·ç» |
$<name> |
æå
¥å¸¦æç»å® name çæ¬å·å
çå
容ï¼è¯¦è§ æè·ç» |
$$ |
æå
¥å符 $ |
ä¾å¦ï¼
let str = "John Smith";
// 交æ¢åååå§æ°
alert(str.replace(/(john) (smith)/i, '$2, $1')) // Smith, John
对äºéè¦âæºè½âæ¿æ¢çåºæ¯ï¼ç¬¬äºä¸ªåæ°å¯ä»¥æ¯ä¸ä¸ªå½æ°ã
æ¯æ¬¡å¹é é½ä¼è°ç¨è¿ä¸ªå½æ°ï¼å¹¶ä¸è¿åçå¼å°ä½ä¸ºæ¿æ¢å符串æå ¥ã
è¯¥å½æ° func(match, p1, p2, ..., pn, offset, input, groups) 另忰è°ç¨ï¼
matchââ å¹é 项ï¼p1, p2, ..., pnââ æè·ç»çå 容ï¼å¦æï¼ï¼offsetââ å¹é 项çä½ç½®ï¼inputââ æºå符串ï¼groupsââ å ·æå½åçæè·ç»ç对象ã
妿æ£å表达å¼ä¸æ²¡ææ¬å·ï¼ååªæ 3 ä¸ªåæ°ï¼func(str, offset, input)ã
ä¾å¦ï¼å°ææå¹é 项é½å¤§åï¼
let str = "html and css";
let result = str.replace(/html|css/gi, str => str.toUpperCase());
alert(result); // HTML and CSS
å°æ¯ä¸ªå¹é é¡¹æ¿æ¢ä¸ºå ¶å¨å符串ä¸çä½ç½®ï¼
alert("Ho-Ho-ho".replace(/ho/gi, (match, offset) => offset)); // 0-3-6
å¨ä¸é¢ç示ä¾ä¸ï¼æä¸¤å¯¹æ¬å·ï¼å æ¤å°ä½¿ç¨ 5 ä¸ªåæ°è°ç¨æ¿æ¢å½æ°ï¼ç¬¬ä¸ä¸ªæ¯å®å ¨å¹é 项ï¼ç¶åæ¯ 2 对æ¬å·ï¼ç¶åæ¯ï¼å¨ç¤ºä¾ä¸æªä½¿ç¨ï¼å¹é ä½ç½®åæºå符串ï¼
let str = "John Smith";
let result = str.replace(/(\w+) (\w+)/, (match, name, surname) => `${surname}, ${name}`);
alert(result); // Smith, John
妿æè®¸å¤ç»ï¼ç¨ rest åæ°ï¼â¦ï¼å¯ä»¥å¾æ¹ä¾¿ç访é®ï¼
let str = "John Smith";
let result = str.replace(/(\w+) (\w+)/, (...match) => `${match[2]}, ${match[1]}`);
alert(result); // Smith, John
æè
ï¼å¦ææä»¬ä½¿ç¨çæ¯å½åç»ï¼å带æå®ä»¬ç groups 对象å§ç»æ¯æåä¸ä¸ªå¯¹è±¡ï¼æä»¥æä»¬å¯ä»¥åè¿æ ·è·åå®ï¼
let str = "John Smith";
let result = str.replace(/(?<name>\w+) (?<surname>\w+)/, (...match) => {
let groups = match.pop();
return `${groups.surname}, ${groups.name}`;
});
alert(result); // Smith, John
使ç¨å½æ°å¯ä»¥ä¸ºæä»¬æä¾ç»ææ¿æ¢åè½ï¼å 为å®å¯ä»¥è·åå¹é é¡¹çææä¿¡æ¯ï¼å¯ä»¥è®¿é®å¤é¨åéï¼å¯ä»¥åä»»ä½äºã
str.replaceAll(str|regexp, str|func)
è¿ä¸ªæ¹æ³ä¸ str.replace æ¬è´¨ä¸æ¯ä¸æ ·çï¼ä½æä¸¤ä¸ªä¸»è¦çåºå«ï¼
- å¦æç¬¬ä¸ä¸ªåæ°æ¯ä¸ä¸ªå符串ï¼å®ä¼æ¿æ¢ ææåºç°ç å第ä¸ä¸ªåæ°ç¸åçå符串âï¼âè
replaceåªä¼æ¿æ¢ 第ä¸ä¸ªã - å¦æç¬¬ä¸ä¸ªåæ°æ¯ä¸ä¸ªæ²¡æä¿®é¥°ç¬¦
gçæ£å表达å¼ï¼å伿¥éã带æä¿®é¥°ç¬¦gï¼å®ç工使¹å¼ä¸replaceç¸åã
replaceAll ç主è¦ç¨éæ¯æ¿æ¢ææåºç°çå符串ã
åè¿æ ·ï¼
// 使ç¨åå·æ¿æ¢ææç ´æå·
alert('12-34-56'.replaceAll("-", ":")) // 12:34:56
regexp.exec(str)
regexp.exec(str) æ¹æ³è¿åå符串 str ä¸ç regexp å¹é
项ãä¸ä»¥åçæ¹æ³ä¸åï¼å®æ¯å¨æ£å表达å¼è䏿¯å¨å符串ä¸è°ç¨çã
å®çè¡ä¸ºåå³äºæ£åè¡¨è¾¾å¼æ¯å¦å
·æä¿®é¥°ç¬¦ gã
å¦ææ²¡æä¿®é¥°ç¬¦ gï¼å regexp.exec(str) ä¼è¿åä¸ ç¬¬ä¸ä¸ªå¹é
项ï¼å°±å str.match(regexp) 飿 ·ãè¿ç§è¡ä¸ºå¹¶æ²¡æå¸¦æ¥ä»»ä½æ°çä¸è¥¿ã
使¯ï¼å¦ææä¿®é¥°ç¬¦ gï¼é£ä¹ï¼
- è°ç¨
regexp.exec(str)ä¼è¿å第ä¸ä¸ªå¹é 项ï¼å¹¶å°ç´§éå ¶åçä½ç½®ä¿åå¨å±æ§regexp.lastIndexä¸ã - ä¸ä¸æ¬¡è¿æ ·çè°ç¨ä¼ä»ä½ç½®
regexp.lastIndexå¼å§æç´¢ï¼è¿åä¸ä¸ä¸ªå¹é 项ï¼å¹¶å°å ¶åçä½ç½®ä¿åå¨regexp.lastIndexä¸ã - â¦â¦ä»¥æ¤ç±»æ¨ã
- å¦ææ²¡æå¹é
项ï¼å
regexp.execè¿ånullï¼å¹¶å°regexp.lastIndexé置为0ã
å æ¤ï¼éå¤è°ç¨ä¼ä¸ä¸ªæ¥ä¸ä¸ªå°è¿åææå¹é
项ï¼ä½¿ç¨å±æ§ regexp.lastIndex æ¥è·è¸ªå½åæç´¢ä½ç½®ã
è¿å»ï¼å¨å° str.matchAll æ¹æ³æ·»å å° JavaScript ä¹åï¼ä¼å¨å¾ªç¯ä¸è°ç¨ regexp.exec æ¥è·åç»çææå¹é
项ï¼
let str = 'More about JavaScript at https://javascript.info';
let regexp = /javascript/ig;
let result;
while (result = regexp.exec(str)) {
alert( `Found ${result[0]} at position ${result.index}` );
// å¨ä½ç½® 11 æ¾å°äº JavaScriptï¼ç¶å
// å¨ä½ç½® 33 æ¾å°äº javascript
}
è¿ç°å¨ä¹ææï¼å°½ç®¡å¯¹äºè¾æ°çæµè§å¨ str.matchAll éå¸¸æ´æ¹ä¾¿ã
æä»¬å¯ä»¥éè¿æå¨è®¾ç½® lastIndexï¼ç¨ regexp.exec ä»ç»å®ä½ç½®è¿è¡æç´¢ã
ä¾å¦ï¼
let str = 'Hello, world!';
let regexp = /\w+/g; // 没æä¿®é¥°ç¬¦ "g"ï¼lastIndex 屿§ä¼è¢«å¿½ç¥
regexp.lastIndex = 5; // ä»ç¬¬ 5 个ä½ç½®æç´¢ï¼ä»éå·å¼å§ï¼
alert( regexp.exec(str) ); // world
妿æ£å表达å¼å¸¦æä¿®é¥°ç¬¦ yï¼åæç´¢å°ç²¾ç¡®å°å¨ regexp.lastIndex ä½ç½®æ§è¡ï¼ä¸ä¼åè¿ä¸æ¥ã
让æä»¬å°ä¸é¢ç¤ºä¾ä¸ç g ä¿®é¥°ç¬¦æ¿æ¢ä¸º yãç°å¨æ²¡ææ¾å°å¹é
项ï¼å 为å¨ä½ç½® 5 夿²¡æåè¯ï¼
let str = 'Hello, world!';
let regexp = /\w+/y;
regexp.lastIndex = 5; // å¨ä½ç½® 5 ç²¾ç¡®æ¥æ¾
alert( regexp.exec(str) ); // null
彿们éè¦éè¿æ£å表达å¼å¨ç¡®åä½ç½®è䏿¯å ¶åçæå¤ä»å符串ä¸â读åâæäºå 容æ¶ï¼è¿å¾æ¹ä¾¿ã
regexp.test(str)
æ¹æ³ regexp.test(str) æ¥æ¾å¹é
项ï¼ç¶åè¿å true/false 表示æ¯å¦åå¨ã
ä¾å¦ï¼
let str = "I love JavaScript";
// è¿ä¸¤ä¸ªæµè¯ç¸å
alert( /love/i.test(str) ); // true
alert( str.search(/love/i) != -1 ); // true
ä¸ä¸ªå¦å®çæ¡çä¾åï¼
let str = "Bla-bla-bla";
alert( /love/i.test(str) ); // false
alert( str.search(/love/i) != -1 ); // false
妿æ£å表达å¼å¸¦æä¿®é¥°ç¬¦ gï¼å regexp.test ä» regexp.lastIndex 屿§å¼å§æ¥æ¾å¹¶æ´æ°æ¤å±æ§ï¼å°±å regexp.exec 䏿 ·ã
å æ¤ï¼æä»¬å¯ä»¥ç¨å®ä»ç»å®ä½ç½®è¿è¡æ¥æ¾ï¼
let regexp = /love/gi;
let str = "I love JavaScript";
// ä»ä½ç½® 10 å¼å§æç´¢ï¼
regexp.lastIndex = 10;
alert( regexp.test(str) ); // falseï¼æ²¡æå¹é
项ï¼
妿æä»¬å¨ä¸åçæºå符串ä¸åºç¨ç¸åçå
¨å±æ£å表达å¼ï¼å¯è½ä¼åºç°é误çç»æï¼å 为 regexp.test çè°ç¨ä¼å¢å regexp.lastIndex 屿§å¼ï¼å æ¤å¨å¦ä¸ä¸ªå符串ä¸çæç´¢å¯è½æ¯ä»é 0 ä½ç½®å¼å§çã
ä¾å¦ï¼è¿éæä»¬å¨å䏿æ¬ä¸è°ç¨ regexp.test 两次ï¼èç¬¬äºæ¬¡è°ç¨å¤±è´¥äºï¼
let regexp = /javascript/g; // ï¼æ°å»ºç«ç regexpï¼regexp.lastIndex=0)
alert( regexp.test("javascript") ); // trueï¼ç°å¨ regexp.lastIndex=10ï¼
alert( regexp.test("javascript") ); // false
è¿æ£æ¯å 为å¨ç¬¬äºä¸ªæµè¯ä¸ regexp.lastIndex ä¸ä¸ºé¶ã
å¦è¦è§£å³è¿ä¸ªé®é¢ï¼æä»¬å¯ä»¥å¨æ¯æ¬¡æç´¢ä¹å设置 regexp.lastIndex = 0ãæè
ï¼ä¸è¦å¨æ£å表达å¼ä¸è°ç¨æ¹æ³ï¼èæ¯ä½¿ç¨åç¬¦ä¸²æ¹æ³ str.match/search/...ï¼è¿äºæ¹æ³ä¸ä½¿ç¨ lastIndexã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼