ååå¼ç¨ï¼\1ã\2
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
ååå¼ç¨æä»£å åæä¸ªæè·ç»çåå¹é ï¼å ¶å¹é çææ¬ä¸è¯¥æè·ç»ç¸åã对äºå ·åæè·ç»ï¼å¯è½æ´å¾åäºä½¿ç¨å ·åååå¼ç¨è¯æ³ã
è¯æ³
\N
夿³¨ï¼N 䏿¯åé¢å符ã
åæ°
N-
表示æè·ç»çç¼å·çæ£æ´æ°ã
æè¿°
ååå¼ç¨æ¯ä¸ç§å¹é
æè·ç»å
åå¹é
è¿çç¸åææ¬çæ¹æ³ãæè·ç»çç¼å·ä» 1 å¼å§ï¼å æ¤ç¬¬ä¸ä¸ªæè·ç»çç»æå¯ç¨ \1 å¼ç¨ï¼ç¬¬äºä¸ªå¯ç¨ \2ï¼ä¾æ¤ç±»æ¨ã\0 æ¯ NUL å符çå符转ä¹ã
å¨ä¸åºå大å°åçå¹é ä¸ï¼ååå¼ç¨å¯è½å¹é ä¸åå§ææ¬å¤§å°åä¸åçææ¬ã
/(b)\1/i.test("bB"); // true
ååå¼ç¨å¿ é¡»æåä¸ä¸ªå·²åå¨çæè·ç»ã妿æå®çç¼å·å¤§äºæè·ç»çæ»æ°ï¼åä¼å¼åè¯æ³é误ã
/(a)\2/u; // SyntaxError: Invalid regular expression: Invalid escape
å¨é Unicode æç¥æ¨¡å¼ä¸ï¼æ æçååå¼ç¨ä¼è½¬æ¢ä¸ºæ§å¼çå «è¿å¶è½¬ä¹åºåãè¿æ¯ä¸ç§ä¸ºå ¼å®¹ Web èä¿ççå·²å¼ç¨è¯æ³ï¼ä¸åºä¾èµæ¤ç¹æ§ã
/(a)\2/.test("a\x02"); // true
å¦æè¢«å¼ç¨çæè·ç»æªå¹é ï¼ä¾å¦ï¼å 为å®å±äºæåæä½ä¸çæªå¹é é项ï¼ï¼æè 该ç»å°æªå¹é ï¼ä¾å¦ï¼å 为å®ä½äºååå¼ç¨å³ä¾§ï¼ï¼åååå¼ç¨å§ç»æåï¼å¦åå¹é äºç©ºå符串ï¼ã
/(?:a|(b))\1c/.test("ac"); // true
/\1(a)/.test("a"); // true
示ä¾
>é 对å¼å·
以ä¸å½æ°ç¨äºå¹é
å符串ä¸ç title='xxx' å title="xxx" 模å¼ã为äºç¡®ä¿å¼å·å¹é
ï¼æä»¬ä½¿ç¨ååå¼ç¨æ¥å¼ç¨ç¬¬ä¸ä¸ªå¼å·ã访é®ç¬¬äºä¸ªæè·ç»ï¼[2]ï¼å°è¿åä½äºå¹é
å¼å·ä¹é´çå符串ï¼
function parseTitle(metastring) {
return metastring.match(/title=(["'])(.*?)\1/)[2];
}
parseTitle('title="foo"'); // 'foo'
parseTitle("title='foo' lang='en'"); // 'foo'
parseTitle('title="Named capturing groups\' advantages"'); // "Named capturing groups' advantages"
å¹é éå¤åè¯
以ä¸å½æ°ç¨äºæ¥æ¾å符串ä¸çéå¤åè¯ï¼éå¸¸æ¯æ¼åé误ï¼ã请注æï¼å®ä½¿ç¨äº \w å符类转ä¹ï¼è¯¥è½¬ä¹ä»
å¹é
è±æåæ¯ï¼èä¸å¹é
带éé³ç忝æå
¶ä»åæ¯è¡¨ãè¥éæ´éç¨çå¹é
ï¼å»ºè®®å
éè¿ç©ºæ ¼å°å符串æåï¼ç¶åéåçæçæ°ç»ã
function findDuplicates(text) {
return text.match(/\b(\w+)\s+\1\b/i)?.[1];
}
findDuplicates("foo foo bar"); // 'foo'
findDuplicates("foo bar foo"); // undefined
findDuplicates("Hello hello"); // 'Hello'
findDuplicates("Hello hellos"); // undefined
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification > # prod-DecimalEscape > |