æ£åè¡¨è¾¾å¼æ¯ç¨äºå¹é
å符串ä¸å符ç»åçæ¨¡å¼ãå¨ JavaScript ä¸ï¼æ£å表达å¼ä¹æ¯å¯¹è±¡ãè¿äºæ¨¡å¼è¢«ç¨äº RegExp
ç exec
å test
æ¹æ³ï¼ä»¥å String
ç match
ãmatchAll
ãreplace
ãsearch
å split
æ¹æ³ãæ¬ç« ä»ç» JavaScript æ£å表达å¼ã
ä½ å¯ä»¥ä½¿ç¨ä»¥ä¸ä¸¤ç§æ¹æ³æå»ºä¸ä¸ªæ£å表达å¼ï¼
使ç¨ä¸ä¸ªæ£å表达å¼åé¢éï¼å ¶ç±å å«å¨ææ ä¹é´ç模å¼ç»æï¼å¦ä¸æç¤ºï¼
èæ¬å è½½åï¼æ£å表达å¼åé¢éå°±ä¼è¢«ç¼è¯ã彿£å表达å¼ä¿æä¸åæ¶ï¼ä½¿ç¨æ¤æ¹æ³å¯è·å¾æ´å¥½çæ§è½ã
æè
è°ç¨RegExp
对象çæé 彿°ï¼å¦ä¸æç¤ºï¼
var re = new RegExp("ab+c");
å¨èæ¬è¿è¡è¿ç¨ä¸ï¼ç¨æé 彿°åå»ºçæ£å表达å¼ä¼è¢«ç¼è¯ã妿æ£å表达å¼å°ä¼æ¹åï¼æè å®å°ä¼ä»ç¨æ·è¾å ¥çæ¥æºä¸å¨æå°äº§çï¼å°±éè¦ä½¿ç¨æé 彿°æ¥å建æ£å表达å¼ã
ç¼åä¸ä¸ªæ£å表达å¼ç模å¼ä¸ä¸ªæ£åè¡¨è¾¾å¼æ¨¡å¼æ¯ç±ç®åçåç¬¦æææçï¼æ¯å¦ /abc/
ï¼æè
æ¯ç®ååç¹æ®å符çç»åï¼æ¯å¦ /ab*c/
æ /Chapter (\d+)\.\d*/
ãæåçä¾åä¸ç¨å°äºæ¬å·ï¼å®å¨æ£å表达å¼ä¸å¸¸ç¨ä½è®°å¿è®¾å¤ãå³è¿é¨åæå¹é
çå符å°ä¼è¢«è®°ä½ä»¥å¤åç»ä½¿ç¨ï¼ä¾å¦ä½¿ç¨æ¬å·çåå符串å¹é
ã
ç®åæ¨¡å¼æ¯ç±ä½ æ³ç´æ¥æ¾å°çå符ææãæ¯å¦ï¼/abc/
è¿ä¸ªæ¨¡å¼å°±è½ä¸ä»
è½å¹é
"abc" å符æç
§é¡ºåºåæ¶åºç°çæ
åµãä¾å¦å¨ "Hi, do you know your abc's?" å "The latest airplane designs evolved from slabcraft." ä¸ä¼å¹é
æåãå¨ä¸è¿°ä¸¤ä¸ªä¾åä¸ï¼å¹é
çååç¬¦ä¸²æ¯ "abc"ã使¯å¨ "Grab crab" ä¸ä¼å¹é
失败ï¼å 为å®è½ç¶å
å«åå符串 "ab c"ï¼ä½å¹¶ä¸æ¯åç¡®ç "abc"ã
å½ä½ éè¦å¹é
ä¸ä¸ªä¸ç¡®å®çå符串æ¶ï¼æ¯å¦å¯»æ¾ä¸ä¸ªæå¤ä¸ª "b"ï¼æè
寻æ¾ç©ºæ ¼ï¼å¯ä»¥å¨æ¨¡å¼ä¸ä½¿ç¨ç¹æ®åç¬¦ãæ¯å¦ï¼ä½ å¯ä»¥ä½¿ç¨ /ab*c/
å»å¹é
ä¸ä¸ªåç¬ç "a" åé¢è·äºé¶ä¸ªæè
å¤ä¸ª "b"ï¼åæ¶åé¢è·ç "c" çå符串ï¼*
çæææ¯åä¸é¡¹åºç°é¶æ¬¡æè
夿¬¡ãå¨å符串 "cbbabbbbcdebc" ä¸ï¼è¿ä¸ªæ¨¡å¼å¹é
äºåå符串 "abbbbc"ã
ä¸é¢ç页é¢ä¸è¡¨æ ¼ååºäºä¸ä¸ªæ£å表达å¼ä¸å¯ä»¥å©ç¨çç¹æ®å符ç宿´å表åæè¿°ã
表示ä¸ä¸ªå¹é å¨æäºæ¡ä»¶ä¸åçãæè¨å å«å è¡æè¨ãåè¡æè¨åæ¡ä»¶è¡¨è¾¾å¼ã
åºåä¸åç±»åçå符ï¼ä¾å¦åºå忝忰åã
å½ä½¿ç¨æ£åè¡¨è¾¾å¼æ¨¡å¼ä¸å符串å¹é æ¶ï¼ç»ä¼å°å¤ä¸ªæ¨¡å¼ç»åæä¸ä¸ªæ´ä½ï¼æè·ç»ä¼æä¾é¢å¤çåå¹é ä¿¡æ¯ãååå¼ç¨æçæ¯å䏿£å表达å¼ä¸ä»¥åæè·çç»ã
表示å¹é çå符æè¡¨è¾¾å¼çæ°éã
\
ä¾ç §ä¸åè§åå¹é ï¼
å¨éç¹æ®å符ä¹åçåææ 表示ä¸ä¸ä¸ªå符æ¯ç¹æ®å符ï¼ä¸è½æç §åé¢çè§£ãä¾å¦ï¼å颿²¡æ "\" ç "b" é常å¹é å°å忝 "b"ï¼å³å符ä¼è¢«ä½ä¸ºåé¢çè§£ï¼æ 论å®åºç°å¨åªéãä½å¦æåé¢å äº "\"ï¼å®å°ä¸åå¹é ä»»ä½å符ï¼èæ¯è¡¨ç¤ºä¸ä¸ªå符边çã
å¨ç¹æ®å符ä¹åçåææ 表示ä¸ä¸ä¸ªåç¬¦ä¸æ¯ç¹æ®å符ï¼åºè¯¥æç §åé¢çè§£ã详æ 请åé 䏿ä¸ç "转ä¹ï¼Escapingï¼" é¨åã
å¦æä½ æ³å°åç¬¦ä¸²ä¼ éç» RegExp æé 彿°ï¼ä¸è¦å¿è®°å¨å符串åé¢éä¸åææ æ¯è½¬ä¹å符ãæä»¥ä¸ºäºå¨æ¨¡å¼ä¸æ·»å ä¸ä¸ªåææ ï¼ä½ éè¦å¨å符串åé¢éä¸è½¬ä¹å®ã/[a-z]\s/i
å new RegExp("[a-z]\\s", "i")
å建äºç¸åçæ£å表达å¼ï¼ä¸ä¸ªç¨äºæç´¢åé¢ç´§è·ç空ç½å符ï¼\s
å¯çåæï¼å¹¶ä¸å¨ a-z èå´å
çä»»æå符ç表达å¼ã为äºéè¿å符串åé¢éç» RegExp æé 彿°å建å
å«åææ ç表达å¼ï¼ä½ éè¦å¨å符串级å«åæ£å表达å¼çº§å«é½å¯¹å®è¿è¡è½¬ä¹ãä¾å¦ /[a-z]:\\/i
å new RegExp("[a-z]:\\\\","i")
ä¼å建ç¸åç表达å¼ï¼å³å¹é
类似 "C:\" å符串ã
^
å¹é è¾å ¥çå¼å§ã妿å¤è¡æ å¿è¢«è®¾ç½®ä¸º trueï¼é£ä¹ä¹å¹é æ¢è¡ç¬¦åç´§è·çä½ç½®ã
ä¾å¦ï¼/^A/
å¹¶ä¸ä¼å¹é
"an A" ä¸ç 'A'ï¼ä½æ¯ä¼å¹é
"An E" ä¸ç 'A'ã
å½ '^
' ä½ä¸ºç¬¬ä¸ä¸ªå符åºç°å¨ä¸ä¸ªå符é忍¡å¼æ¶ï¼å®å°ä¼æä¸åçå«ä¹ãååå符éå ä¸èæè¯¦ç»ä»ç»å示ä¾ã
$
å¹é è¾å ¥çç»æã妿å¤è¡æ å¿è¢«è®¾ç½®ä¸º trueï¼é£ä¹ä¹å¹é æ¢è¡ç¬¦åçä½ç½®ã
ä¾å¦ï¼/t$/
å¹¶ä¸ä¼å¹é
"eater" ä¸ç 't'ï¼ä½æ¯ä¼å¹é
"eat" ä¸ç 't'ã
*
å¹é
åä¸ä¸ªè¡¨è¾¾å¼ 0 次æå¤æ¬¡ãçä»·äº {0,}
ã
ä¾å¦ï¼/bo*/
ä¼å¹é
"A ghost boooooed" ä¸ç 'booooo' å "A bird warbled" ä¸ç 'b'ï¼ä½æ¯å¨ "A goat grunted" ä¸ä¸ä¼å¹é
ä»»ä½å
容ã
+
å¹é
åé¢ä¸ä¸ªè¡¨è¾¾å¼ 1 次æè
夿¬¡ãçä»·äº {1,}
ã
ä¾å¦ï¼/a+/
ä¼å¹é
"candy" ä¸ç 'a' å "caaaaaaandy" 䏿æç 'a'ï¼ä½æ¯å¨ "cndy" ä¸ä¸ä¼å¹é
ä»»ä½å
容ã
?
å¹é
åé¢ä¸ä¸ªè¡¨è¾¾å¼ 0 次æè
1 次ãçä»·äº {0,1}
ã
ä¾å¦ï¼/e?le?/
å¹é
"angel" ä¸ç 'el'ã"angle" ä¸ç 'le' 以å "oslo' ä¸ç 'l'ã
å¦æç´§è·å¨ä»»ä½éè¯ *ã +ã? æ {} çåé¢ï¼å°ä¼ä½¿éè¯å为é贪婪ï¼å¹é
å°½éå°çå符ï¼ï¼å缺ç使ç¨ç贪婪模å¼ï¼å¹é
å°½å¯è½å¤çåç¬¦ï¼æ£å¥½ç¸åãä¾å¦ï¼å¯¹ "123abc" ä½¿ç¨ /\d+/
å°ä¼å¹é
"123"ï¼èä½¿ç¨ /\d+?/
ååªä¼å¹é
å° "1"ã
è¿ç¨äºå
è¡æè¨ä¸ï¼å¦æ¬è¡¨ç x(?=y)
å x(?!y)
æ¡ç®æè¿°ã
.
ï¼å°æ°ç¹ï¼é»è®¤å¹é 餿¢è¡ç¬¦ä¹å¤çä»»ä½å个å符ã
ä¾å¦ï¼/.n/
å°ä¼å¹é
"nay, an apple is on the tree" ä¸ç 'an' å 'on'ï¼ä½æ¯ä¸ä¼å¹é
'nay'ã
妿 s
("dotAll") æ å¿ä½è¢«è®¾ä¸º trueï¼å®ä¹ä¼å¹é
æ¢è¡ç¬¦ã
(x)
åä¸é¢çä¾åå±ç¤ºç飿 ·ï¼å®ä¼å¹é 'x' å¹¶ä¸è®°ä½å¹é 项ãå ¶ä¸æ¬å·è¢«ç§°ä¸ºæè·æ¬å·ã
æ¨¡å¼ /(foo) (bar) \1 \2/
ä¸ç '(foo)
' å '(bar)
' å¹é
å¹¶è®°ä½å符串 "foo bar foo bar" ä¸å两个åè¯ã模å¼ä¸ç \1
å \2
表示第ä¸ä¸ªå第äºä¸ªè¢«æè·æ¬å·å¹é
çåå符串ï¼å³ foo
å bar
ï¼å¹é
äºåå符串ä¸çå两个åè¯ã注æ \1
ã\2
ã...ã\n
æ¯ç¨å¨æ£å表达å¼çå¹é
ç¯èï¼è¯¦æ
å¯ä»¥åé
åæç \n æ¡ç®ãè卿£å表达å¼çæ¿æ¢ç¯èï¼åè¦ä½¿ç¨å $1
ã$2
ã...ã$n
è¿æ ·çè¯æ³ï¼ä¾å¦ï¼'bar foo'.replace(/(...) (...)/, '$2 $1')
ã$&
表示æ´ä¸ªç¨äºå¹é
çåå符串ã
(?:x)
å¹é
'x' 使¯ä¸è®°ä½å¹é
项ãè¿ç§æ¬å·å«ä½éæè·æ¬å·ï¼ä½¿å¾ä½ è½å¤å®ä¹ä¸æ£å表达å¼è¿ç®ç¬¦ä¸èµ·ä½¿ç¨çå表达å¼ãççè¿ä¸ªä¾å /(?:foo){1,2}/
ãå¦æè¡¨è¾¾å¼æ¯ /foo{1,2}/
ï¼{1,2}
å°åªåºç¨äº 'foo' çæåä¸ä¸ªå符 'o'ãå¦æä½¿ç¨éæè·æ¬å·ï¼å {1,2}
ä¼åºç¨äºæ´ä¸ª 'foo' åè¯ãæ´å¤ä¿¡æ¯ï¼å¯ä»¥åé
䏿ç ä½¿ç¨æ¬å·çåå符串å¹é
æ¡ç®ã
x(?=y)
å¹é 'x'ä» ä» å½'x'åé¢è·ç'y'.è¿ç§å«åå è¡æè¨ã
ä¾å¦ï¼/Jack(?=Sprat)/ä¼å¹é å°'Jack'ä» å½å®åé¢è·ç'Sprat'ã/Jack(?=Sprat|Frost)/å¹é âJackâä» å½å®åé¢è·ç'Sprat'æè æ¯âFrostâã使¯âSpratâåâFrostâé½ä¸æ¯å¹é ç»æçä¸é¨åã
(?<=y)
x
å¹é 'x'ä» å½'x'å颿¯'y'.è¿ç§å«ååè¡æè¨ã
ä¾å¦ï¼/(?<=Jack)Sprat/ä¼å¹é å°' Sprat 'ä» ä» å½å®å颿¯' Jack 'ã/(?<=Jack|Tom)Sprat/å¹é âSprat âä» ä» å½å®å颿¯'Jack'æè æ¯âTomâã使¯âJackâåâTomâé½ä¸æ¯å¹é ç»æçä¸é¨åã
x(?!y)
ä» ä» å½'x'åé¢ä¸è·ç'y'æ¶å¹é 'x'ï¼è¿è¢«ç§°ä¸ºæ£åå¦å®æ¥æ¾ã
ä¾å¦ï¼ä» ä» å½è¿ä¸ªæ°åå颿²¡æè·å°æ°ç¹çæ¶åï¼/\d+(?!\.)/ å¹é ä¸ä¸ªæ°åãæ£å表达å¼/\d+(?!\.)/.exec("3.141") å¹é â141âè䏿¯â3.141â
(?<!y)x
ä» ä» å½'x'åé¢ä¸æ¯'y'æ¶å¹é 'x'ï¼è¿è¢«ç§°ä¸ºååå¦å®æ¥æ¾ã
ä¾å¦ï¼ä»
ä»
å½è¿ä¸ªæ°åå颿²¡æè´å·çæ¶åï¼/(?<!-)\d+/
å¹é
ä¸ä¸ªæ°åã/(?<!-)\d+/.exec('3')
å¹é
å° "3"./(?<!-)\d+/.exec('-3')
å 为è¿ä¸ªæ°ååæè´å·ï¼æä»¥æ²¡æå¹é
å°ã
x|y
å¹é âxâæè âyâã
ä¾å¦ï¼/green|red/å¹é âgreen appleâä¸çâgreenâåâred appleâä¸çâredâ
{n}
n æ¯ä¸ä¸ªæ£æ´æ°ï¼å¹é
äºåé¢ä¸ä¸ªå符å好åºç°äº n 次ã
{n,}
n æ¯ä¸ä¸ªæ£æ´æ°ï¼å¹é åä¸ä¸ªå符è³å°åºç°äº n 次ã
ä¾å¦ï¼/a{2,}/ å¹é "aa", "aaaa" å "aaaaa" 使¯ä¸å¹é "a"ã
{n,m}
n å m 齿¯æ´æ°ãå¹é åé¢çå符è³å° n æ¬¡ï¼æå¤ m 次ã妿 n æè m ç弿¯ 0ï¼è¿ä¸ªå¼è¢«å¿½ç¥ã
ä¾å¦ï¼/a{1, 3}/ å¹¶ä¸å¹é âcndyâä¸çä»»æå符ï¼å¹é âcandyâä¸ç aï¼å¹é âcaandyâä¸çå两个 aï¼ä¹å¹é âcaaaaaaandyâä¸çåä¸ä¸ª aãæ³¨æï¼å½å¹é âcaaaaaaandyâæ¶ï¼å¹é ç弿¯âaaaâï¼å³ä½¿åå§çåç¬¦ä¸²ä¸ææ´å¤ç aã
[xyz]
ä¸ä¸ªå符éåãå¹é
æ¹æ¬å·ä¸çä»»æå符ï¼å
æ¬è½¬ä¹åºåãä½ å¯ä»¥ä½¿ç¨ç ´æå·ï¼-ï¼æ¥æå®ä¸ä¸ªå符èå´ã对äºç¹ï¼.ï¼åæå·ï¼*ï¼è¿æ ·çç¹æ®ç¬¦å·å¨ä¸ä¸ªå符é䏿²¡æç¹æ®çæä¹ãä»ä»¬ä¸å¿
è¿è¡è½¬ä¹ï¼ä¸è¿è½¬ä¹ä¹æ¯èµ·ä½ç¨çã
[^xyz]
ä¸ä¸ªååå符éãä¹å°±æ¯è¯´ï¼ å®å¹é 任使²¡æå å«å¨æ¹æ¬å·ä¸çå符ãä½ å¯ä»¥ä½¿ç¨ç ´æå·ï¼-ï¼æ¥æå®ä¸ä¸ªå符èå´ã任使®éå符å¨è¿é齿¯èµ·ä½ç¨çã
ä¾å¦ï¼[^abc] å [^a-c] æ¯ä¸æ ·çãä»ä»¬å¹é "brisket"ä¸çârâï¼ä¹å¹é âchopâä¸çâhâã
[\b]
å¹é ä¸ä¸ªéæ ¼ (U+0008)ãï¼ä¸è¦å\bæ··æ·äºãï¼
\b
å¹é ä¸ä¸ªè¯çè¾¹çãä¸ä¸ªè¯çè¾¹çå°±æ¯ä¸ä¸ªè¯ä¸è¢«å¦å¤ä¸ä¸ªâåâå符è·éçä½ç½®æè åé¢è·å ¶ä»âåâå符çä½ç½®ï¼ä¾å¦å¨åæ¯åç©ºæ ¼ä¹é´ã注æï¼å¹é ä¸ä¸å æ¬å¹é çåè¾¹çãæ¢å¥è¯è¯´ï¼ä¸ä¸ªå¹é çè¯çè¾¹ççå 容çé¿åº¦æ¯ 0ãï¼ä¸è¦å [\b] æ··æ·äºï¼
使ç¨"moon"举ä¾ï¼
/\bm/å¹é
âmoonâä¸çâmâï¼
/oo\b/å¹¶ä¸å¹é
"moon"ä¸ç'oo'ï¼å 为'oo'被ä¸ä¸ªâåâå符'n'ç´§è·çã
/oon\b/å¹é
"moon"ä¸ç'oon'ï¼å 为'oon'æ¯è¿ä¸ªå符串çç»æé¨åãè¿æ ·ä»æ²¡æè¢«ä¸ä¸ªâåâå符紧è·çã
/\w\b\w/å°ä¸è½å¹é
ä»»ä½å符串ï¼å 为å¨ä¸ä¸ªåè¯ä¸é´çå符永è¿ä¹ä¸å¯è½åæ¶æ»¡è¶³æ²¡æâåâå符è·éåæâåâå符è·éä¸¤ç§æ
åµã
夿³¨ï¼ JavaScript çæ£å表达å¼å¼æå°ç¹å®çå符éå®ä¹ä¸ºâåâå符ãä¸å¨è¯¥éåä¸çä»»ä½å符é½è¢«è®¤ä¸ºæ¯ä¸ä¸ªæè¯ãè¿ç»å符ç¸å½æéï¼å®åªå æ¬å¤§ååå°åçç½é©¬åæ¯ï¼åè¿å¶æ°ååä¸å线å符ãä¸å¹¸çæ¯ï¼éè¦çå符ï¼ä¾å¦âéâæâüâï¼è¢«è§ä¸ºæè¯ã
\B
å¹é ä¸ä¸ªéåè¯è¾¹çãå¹é å¦ä¸å ç§æ åµï¼
ä¾å¦ï¼/\B../å¹é "noonday"ä¸ç'oo', è/y\B../å¹é "possibly yesterday"ä¸çâyesâ
\cX
å½ X æ¯å¤äº A å° Z ä¹é´çåç¬¦çæ¶åï¼å¹é å符串ä¸çä¸ä¸ªæ§å¶ç¬¦ã
ä¾å¦ï¼/\cM/
å¹é
å符串ä¸ç control-M (U+000D)ã
\d
å¹é
ä¸ä¸ªæ°åã
çä»·äº [0-9]
ã
ä¾å¦ï¼ /\d/
æè
/[0-9]/
å¹é
"B2 is the suite number."ä¸ç'2'ã
\D
å¹é
ä¸ä¸ªéæ°åå符ã
çä»·äº [^0-9]
ã
ä¾å¦ï¼ /\D/
æè
/[^0-9]/
å¹é
"B2 is the suite number."ä¸ç'B' ã
\f
å¹é
ä¸ä¸ªæ¢é¡µç¬¦ (U+000C)ã \n
å¹é
ä¸ä¸ªæ¢è¡ç¬¦ (U+000A)ã \r
å¹é
ä¸ä¸ªå车符 (U+000D)ã \s
å¹é
ä¸ä¸ªç©ºç½å符ï¼å
æ¬ç©ºæ ¼ãå¶è¡¨ç¬¦ãæ¢é¡µç¬¦åæ¢è¡ç¬¦ãçä»·äº [\f\n\r\t\v\u0020\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
ã
ä¾å¦ï¼/\s\w*/
å¹é
"foo bar."ä¸ç' bar'ã
ç»æµè¯ï¼\sä¸å¹é "\u180e"ï¼å¨å½åçæ¬ Chrome(v80.0.3987.122) å Firefox(76.0.1) æ§å¶å°è¾å ¥/\s/.test("\u180e") åè¿å falseã
\S
å¹é
ä¸ä¸ªé空ç½å符ãçä»·äº [^\f\n\r\t\v\u0020\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
ã
ä¾å¦ï¼/\S\w*/
å¹é
"foo bar."ä¸ç'foo'ã
\t
å¹é
ä¸ä¸ªæ°´å¹³å¶è¡¨ç¬¦ (U+0009)ã \v
å¹é
ä¸ä¸ªåç´å¶è¡¨ç¬¦ (U+000B)ã \w
å¹é
ä¸ä¸ªååå符ï¼åæ¯ãæ°åæè
ä¸å线ï¼ãçä»·äº [A-Za-z0-9_]
ã
ä¾å¦ï¼/\w/
å¹é
"apple," ä¸ç 'a'ï¼"$5.28,"ä¸ç '5' å "3D." ä¸ç '3'ã
\W
å¹é
ä¸ä¸ªéååå符ãçä»·äº [^A-Za-z0-9_]
ã
ä¾å¦ï¼/\W/
æè
/[^A-Za-z0-9_]/
å¹é
"50%." ä¸ç '%'ã
\n
卿£å表达å¼ä¸ï¼å®è¿åæåç第 n 个åæè·å¹é çåå符串 (æè·çæ°ç®ä»¥å·¦æ¬å·è®¡æ°)ã
æ¯å¦ /apple(,)\sorange\1/
å¹é
"apple, orange, cherry, peach."ä¸ç'apple, orange,' ã
\0
å¹é
NULLï¼U+0000ï¼å符ï¼ä¸è¦å¨è¿åé¢è·å
¶ä»å°æ°ï¼å 为 \0<digits>
æ¯ä¸ä¸ªå
«è¿å¶è½¬ä¹åºåã \xhh
å¹é
ä¸ä¸ªä¸¤ä½åå
è¿å¶æ°ï¼\x00-\xFFï¼è¡¨ç¤ºçå符ã \uhhhh
å¹é
ä¸ä¸ªåä½åå
è¿å¶æ°è¡¨ç¤ºç UTF-16 代ç åå
ã
\u{hhhh}æ\u{hhhhh}
å¦æä½ éè¦ä½¿ç¨ä»»ä½ç¹æ®å符çåé¢å¼ï¼ä¾å¦ï¼æç´¢å符'*'ï¼ï¼ä½ å¿
é¡»éè¿å¨å®å颿¾ä¸ä¸ªåææ æ¥è½¬ä¹å®ãä¾å¦ï¼è¦æç´¢'a'åè·'*'åè·'b'ï¼ä½ åºè¯¥ä½¿ç¨/a\*b/
- åææ â转ä¹âå符'*'ï¼ä½¿å
¶æä¸ºæåèéç¹æ®ç¬¦å·ã
类似å°ï¼å¦æä½ æ£å¨ç¼åæ£åè¡¨è¾¾å¼æåå¹¶ä¸éè¦å¹é
ææ ï¼'/'ï¼ï¼é£ä¹éè¦è½¬ä¹å®ï¼å¦åï¼ææ æ¯æ£åç»æ¢ç¬¦ï¼ãä¾å¦ï¼è¦æç´¢å符串â/ example /âåè·ä¸ä¸ªæå¤ä¸ªåæ¯å符ï¼ä½ éè¦ä½¿ç¨/\/example\/[a-z]+/i
ââæ¯ä¸ªææ ä¹å使ç¨åææ ä½¿å®ä»¬æä¸ºæ®éå符ã
è¦å¹é
ææ¬ç¬¦å·åææ ï¼ä½ éè¦è½¬ä¹åææ ãä¾å¦ï¼è¦å¹é
å符串âC:\âï¼å
¶ä¸âCâå¯ä»¥æ¯ä»»ä½åæ¯ï¼ä½ å°ä½¿ç¨/[A-Z]:\\/
ââ第ä¸ä¸ªåææ è½¬ä¹åé¢çé£ä¸ªåææ ï¼å æ¤è¡¨è¾¾å¼æç´¢å个æ®éåç¬¦åææ ã
å¦æå° RegExp æé 彿°ä¸å符串æåä¸èµ·ä½¿ç¨ï¼è¯·è®°ä½åææ æ¯å符串æåä¸ç转ä¹ï¼å æ¤è¦å¨æ£å表达å¼ä¸ä½¿ç¨å®ï¼ä½ éè¦å¨å符串æå级å«è½¬ä¹å®ã /a\*b/
ånew RegExp("a\\*b")
å建çè¡¨è¾¾å¼æ¯ç¸åçï¼æç´¢âaâåè·æåâ*âåè·âbâã
å°ç¨æ·è¾å ¥è½¬ä¹ä¸ºæ£å表达å¼ä¸çä¸ä¸ªåé¢å符串ï¼å¯ä»¥éè¿ç®åçæ¿æ¢æ¥å®ç°ï¼
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
//$&表示æ´ä¸ªè¢«å¹é
çå符串
}
æ£å表达å¼åç"g"æ¯ä¸ä¸ªè¡¨ç¤ºå ¨å±æç´¢éé¡¹ææ è®°ï¼å°å¨æ´ä¸ªåç¬¦ä¸²æ¥æ¾å¹¶è¿åææå¹é ç»æãè¿å°å¨ä¸é¢çéè¿æ å¿è¿è¡é«çº§æç´¢è¯¦è¿°ã
为ä»ä¹è¿ä¸ªæ²¡æå å»ºå¨ JavaScript ä¸ï¼ä¹åæè®¡åå¨ RegExp å¯¹è±¡ä¸æ·»å ä¸ä¸ª Functionï¼ä½å¨TC39ä¸è¢«å¦å³äºã
ä½¿ç¨æå ¥è¯ä»»ä½æ£å表达å¼çæå ¥è¯é½ä¼ä½¿è¿é¨åå¹é çå¯å符串被记å¿ã䏿¦è¢«è®°å¿ï¼è¿ä¸ªå¯å符串就å¯ä»¥è¢«è°ç¨äºå ¶ä»ç¨éï¼å¦å ä½¿ç¨æ¬å·çåå符串å¹é ä¹ä¸æè¿°ã
æ¯å¦ï¼ /Chapter (\d+)\.\d*/
è§£éäºé¢å¤è½¬ä¹çåç¹æ®çå符ï¼å¹¶è¯´æäºè¿é¨å pattern åºè¯¥è¢«è®°å¿ãå®ç²¾ç¡®å°å¹é
åé¢è·çä¸ä¸ªä»¥ä¸æ°åå符çå符 'Chapter ' (\d
æä¸ºä»»ä½æ°åå符ï¼+ æä¸º 1 次以ä¸
)ï¼è·çä¸ä¸ªå°æ°ç¹ï¼å¨è¿ä¸ªåç¬¦ä¸æ¬èº«ä¹æ¯ä¸ä¸ªç¹æ®å符ï¼å°æ°ç¹åç \ æå³çè¿ä¸ª pattern å¿
须寻æ¾åé¢å符 '.')ï¼è·ç任使°åå符 0 次以ä¸ã (\d
æä¸ºæ°ååç¬¦ï¼ *
æä¸º 0 次以ä¸)ãå¦å¤ï¼æå
¥è¯ä¹ç¨æ¥è®°å¿ç¬¬ä¸ä¸ªå¹é
çæ°åå符ã
æ¤æ¨¡å¼å¯ä»¥å¹é å符串"Open Chapter 4.3, paragraph 6"ï¼å¹¶ä¸'4'å°ä¼è¢«è®°ä½ãæ¤æ¨¡å¼å¹¶ä¸è½å¹é "Chapter 3 and 4"ï¼å 为å¨è¿ä¸ªå符串ä¸'3'çå颿²¡æç¹å·'.'ã
æ¬å·ä¸ç"?:"ï¼è¿ç§æ¨¡å¼å¹é çåå符串å°ä¸ä¼è¢«è®°ä½ãæ¯å¦ï¼(?:\d+) å¹é 䏿¬¡æå¤æ¬¡æ°åå符ï¼ä½æ¯ä¸è½è®°ä½å¹é çå符ã
ä½¿ç¨æ£åè¡¨è¾¾å¼æ£å表达å¼å¯ä»¥è¢«ç¨äº RegExp
ç exec
å test
æ¹æ³ä»¥å String
ç match
ãreplace
ãsearch
å split
æ¹æ³ãè¿äºæ¹æ³å¨ JavaScript æåä¸æè¯¦ç»çè§£éã
exec
ä¸ä¸ªå¨åç¬¦ä¸²ä¸æ§è¡æ¥æ¾å¹é
ç RegExp æ¹æ³ï¼å®è¿åä¸ä¸ªæ°ç»ï¼æªå¹é
å°åè¿å nullï¼ã test
ä¸ä¸ªå¨åç¬¦ä¸²ä¸æµè¯æ¯å¦å¹é
ç RegExp æ¹æ³ï¼å®è¿å true æ falseã match
ä¸ä¸ªå¨åç¬¦ä¸²ä¸æ§è¡æ¥æ¾å¹é
ç String æ¹æ³ï¼å®è¿åä¸ä¸ªæ°ç»ï¼å¨æªå¹é
å°æ¶ä¼è¿å nullã matchAll
ä¸ä¸ªå¨åç¬¦ä¸²ä¸æ§è¡æ¥æ¾ææå¹é
ç String æ¹æ³ï¼å®è¿åä¸ä¸ªè¿ä»£å¨ï¼iteratorï¼ã search
ä¸ä¸ªå¨åç¬¦ä¸²ä¸æµè¯å¹é
ç String æ¹æ³ï¼å®è¿åå¹é
å°çä½ç½®ç´¢å¼ï¼æè
å¨å¤±è´¥æ¶è¿å -1ã replace
ä¸ä¸ªå¨åç¬¦ä¸²ä¸æ§è¡æ¥æ¾å¹é
ç String æ¹æ³ï¼å¹¶ä¸ä½¿ç¨æ¿æ¢åç¬¦ä¸²æ¿æ¢æå¹é
å°çåå符串ã split
ä¸ä¸ªä½¿ç¨æ£åè¡¨è¾¾å¼æè
ä¸ä¸ªåºå®å符串åéä¸ä¸ªå符串ï¼å¹¶å°åéåçåå符串åå¨å°æ°ç»ä¸ç String
æ¹æ³ã
å½ä½ æ³è¦ç¥éå¨ä¸ä¸ªå符串ä¸çä¸ä¸ªå¹é æ¯å¦è¢«æ¾å°ï¼ä½ å¯ä»¥ä½¿ç¨ test æ search æ¹æ³ï¼æ³å¾å°æ´å¤çä¿¡æ¯ï¼ä½æ¯æ¯è¾æ ¢ï¼åå¯ä»¥ä½¿ç¨ exec æ match æ¹æ³ãå¦æä½ ä½¿ç¨ exec æ match æ¹æ³å¹¶ä¸å¹é æåäºï¼é£ä¹è¿äºæ¹æ³å°è¿åä¸ä¸ªæ°ç»å¹¶ä¸æ´æ°ç¸å ³çæ£å表达å¼å¯¹è±¡ç屿§åé¢å®ä¹çæ£å表达å¼å¯¹è±¡ï¼è¯¦è§ä¸ï¼ã妿å¹é 失败ï¼é£ä¹ exec æ¹æ³è¿å nullï¼ä¹å°±æ¯ falseï¼ã
卿¥ä¸æ¥çä¾åä¸ï¼èæ¬å°ä½¿ç¨ exec æ¹æ³å¨ä¸ä¸ªåç¬¦ä¸²ä¸æ¥æ¾ä¸ä¸ªå¹é ã
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
å¦æä½ ä¸éè¦è®¿é®æ£å表达å¼ç屿§ï¼è¿ä¸ªèæ¬éè¿å¦ä¸ä¸ªæ¹æ³æ¥å建 myArrayï¼
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
// å "cdbbdbsbz".match(/d(b+)d/g); ç¸ä¼¼ã
// 使¯ "cdbbdbsbz".match(/d(b+)d/g) è¾åºæ°ç» [ "dbbd" ]ï¼
// è /d(b+)d/g.exec('cdbbdbsbz') è¾åºæ°ç» [ "dbbd", "bb", index: 1, input: "cdbbdbsbz" ].
å¦æä½ æ³éè¿ä¸ä¸ªå符串æå»ºæ£å表达å¼ï¼é£ä¹è¿ä¸ªèæ¬è¿æå¦ä¸ç§æ¹æ³ï¼
var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
éè¿è¿äºèæ¬ï¼å¹é æååå°è¿åä¸ä¸ªæ°ç»å¹¶ä¸æ´æ°æ£å表达å¼ç屿§ï¼å¦ä¸è¡¨æç¤ºã
æ£åè¡¨è¾¾å¼æ§è¡åçè¿åä¿¡æ¯ å¯¹è±¡ 屿§æç´¢å¼ æè¿° å¨ä¾åä¸å¯¹åºçå¼myArray
å¹é
å°çåç¬¦ä¸²åææè¢«è®°ä½çåå符串ã ["dbbd", "bb"]
index
å¨è¾å
¥çå符串ä¸å¹é
å°ç以 0 å¼å§çç´¢å¼å¼ã 1
input
åå§å符串ã "cdbbdbsbz"
[0]
æè¿ä¸ä¸ªå¹é
å°çå符串ã "dbbd"
myRe
lastIndex
å¼å§ä¸ä¸ä¸ªå¹é
çèµ·å§ç´¢å¼å¼ãï¼è¿ä¸ªå±æ§åªæå¨ä½¿ç¨ g åæ°æ¶å¯ç¨å¨ éè¿åæ°è¿è¡é«çº§æç´¢ ä¸èæè¯¦ç»çæè¿°.) 5
source
模å¼å颿æ¬ã卿£å表达å¼åå»ºæ¶æ´æ°ï¼ä¸æ§è¡ã "d(b+)d"
å¦è¿ä¸ªä¾åä¸ç第äºç§å½¢å¼æç¤ºï¼ä½ å¯ä»¥ä½¿ç¨å¯¹è±¡åå§å¨å建ä¸ä¸ªæ£å表达å¼å®ä¾ï¼ä½ä¸åé ç»åéãå¦æä½ è¿æ ·åï¼é£ä¹ï¼æ¯ä¸æ¬¡ä½¿ç¨æ¶é½ä¼å建ä¸ä¸ªæ°çæ£å表达å¼å®ä¾ãå æ¤ï¼å¦æä½ 䏿æ£å表达å¼å®ä¾åé ç»ä¸ä¸ªåéï¼ä½ 以åå°ä¸è½è®¿é®è¿ä¸ªæ£å表达å¼å®ä¾ç屿§ãä¾å¦ï¼åå¦ä½ æå¦ä¸èæ¬ï¼
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + myRe.lastIndex);
è¿ä¸ªèæ¬è¾åºå¦ä¸ï¼
The value of lastIndex is 5
ç¶èï¼å¦æä½ æå¦ä¸èæ¬ï¼
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);
宿¾ç¤ºä¸ºï¼
The value of lastIndex is 0
å½åç/d(b+)d/g 使ç¨ä¸¤ä¸ªä¸åç¶æçæ£å表达å¼å¯¹è±¡ï¼lastIndex 屿§ä¼å¾å°ä¸åçå¼ãå¦æä½ éè¦è®¿é®ä¸ä¸ªæ£å表达å¼ç屿§ï¼åéè¦å建ä¸ä¸ªå¯¹è±¡åå§åçæå¨ï¼ä½ åºè¯¥é¦å æå®èµå¼ç»ä¸ä¸ªåéã
ä½¿ç¨æ¬å·çåå符串å¹é ä¸ä¸ªæ£åè¡¨è¾¾å¼æ¨¡å¼ä½¿ç¨æ¬å·ï¼å°å¯¼è´ç¸åºçåå¹é 被记ä½ãä¾å¦ï¼/a(b)c /å¯ä»¥å¹é å符串âabcâï¼å¹¶ä¸è®°å¾âbâãåè°è¿äºæ¬å·ä¸å¹é çå串ï¼ä½¿ç¨æ°ç»å ç´ [1],â¦â¦[n]ã
ä½¿ç¨æ¬å·å¹é çååç¬¦ä¸²çæ°éæ¯æ éçãè¿åçæ°ç»ä¸ä¿åææè¢«åç°çåå¹é ãä¸é¢çä¾å说æäºå¦ä½ä½¿ç¨æ¬å·çåå符串å¹é ã
ä¸é¢çèæ¬ä½¿ç¨ replace() æ¹æ³æ¥è½¬æ¢å符串ä¸çåè¯ãå¨å¹é å°çæ¿æ¢ææ¬ä¸ï¼èæ¬ä½¿ç¨æ¿ä»£ç$ 1,$ 2 表示第ä¸ä¸ªå第äºä¸ªæ¬å·çåå符串å¹é ã
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
è¿ä¸ªè¡¨è¾¾å¼è¾åº "Smith, John"ã
éè¿æ å¿è¿è¡é«çº§æç´¢æ£åè¡¨è¾¾å¼æå
个å¯éåæ° (flags
) å
许å
¨å±åä¸å大å°åæç´¢çãè¿äºåæ°æ¢å¯ä»¥åç¬ä½¿ç¨ä¹è½ä»¥ä»»æé¡ºåºä¸èµ·ä½¿ç¨ï¼å¹¶ä¸è¢«å
å«å¨æ£å表达å¼å®ä¾ä¸ã
g
å
¨å±æç´¢ã i
ä¸åºå大å°åæç´¢ã m
å¤è¡æç´¢ã s
å
许 .
å¹é
æ¢è¡ç¬¦ã u
ä½¿ç¨ unicode ç çæ¨¡å¼è¿è¡å¹é
ã y
æ§è¡âç²æ§ (sticky
)âæç´¢ï¼å¹é
ä»ç®æ å符串çå½åä½ç½®å¼å§ã
为äºå¨æ£å表达å¼ä¸å 嫿 å¿ï¼è¯·ä½¿ç¨ä»¥ä¸è¯æ³ï¼
æè
var re = new RegExp("pattern", "flags");
å¼å¾æ³¨æçæ¯ï¼æ å¿æ¯ä¸ä¸ªæ£å表达å¼çä¸é¨åï¼å®ä»¬å¨æ¥ä¸æ¥çæ¶é´å°ä¸è½æ·»å æå é¤ã
ä¾å¦ï¼re = /\w+\s/g å°å建ä¸ä¸ªæ¥æ¾ä¸ä¸ªæå¤ä¸ªå符åæä¸ä¸ªç©ºæ ¼çæ£å表达å¼ï¼æè ç»åèµ·æ¥åæ¤è¦æ±çå符串ã
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);
// ["fee ", "fi ", "fo "]
è¿æ®µä»£ç å°è¾åº ["fee ", "fi ", "fo "]ãå¨è¿ä¸ªä¾åä¸ï¼ä½ å¯ä»¥å°ï¼
æ¿æ¢æï¼
var re = new RegExp("\\w+\\s", "g");
å¹¶ä¸è½è·åå°ç¸åçç»æã
ä½¿ç¨ .exec()
æ¹æ³æ¶ï¼ä¸ g
æ å¿å
³èçè¡ä¸ºæ¯ä¸åçãï¼âclassâåâargumentâçä½ç¨ç¸åï¼å¨ .match()
çæ
åµä¸ï¼åç¬¦ä¸²ç±»ï¼ææ°æ®ç±»åï¼æ¥æè¯¥æ¹æ³ï¼èæ£å表达å¼åªæ¯ä¸ä¸ªåæ°ï¼èå¨ .exec()
çæ
åµä¸ï¼å®æ¯æ¥æè¯¥æ¹æ³çæ£å表达å¼ï¼å
¶ä¸å符串æ¯åæ°ãï¼å¯¹æ¯ str.match(re)
ä¸ re.exec(str)
ï¼g
æ å¿ä¸ .exec()
æ¹æ³ä¸èµ·ä½¿ç¨è·å¾è¿ä»£è¿å±ã
var xArray;
while ((xArray = re.exec(str))) console.log(xArray);
// produces:
// ["fee ", index: 0, input: "fee fi fo fum"]
// ["fi ", index: 4, input: "fee fi fo fum"]
// ["fo ", index: 7, input: "fee fi fo fum"]
m æ å¿ç¨äºæå®å¤è¡è¾å ¥å符串åºè¯¥è¢«è§ä¸ºå¤ä¸ªè¡ãå¦æä½¿ç¨ m æ å¿ï¼^å$å¹é çå¼å§æç»æè¾å ¥å符串ä¸çæ¯ä¸è¡ï¼è䏿¯æ´ä¸ªå符串çå¼å§æç»æã
示ä¾ä»¥ä¸ä¾å说æäºä¸äºæ£å表达å¼çç¨éã
æ¹åè¾å ¥å符串ç顺åºä»¥ä¸ä¾åè§£éäºæ£å表达å¼çææå string.split()
以å string.replace()
çç¨éãå®ä¼æ´çä¸ä¸ªåªæç²ç¥æ ¼å¼ç嫿å
¨åï¼ååé¦å
åºç°ï¼çè¾å
¥å符串ï¼è¿ä¸ªåç¬¦ä¸²è¢«ç©ºæ ¼ãæ¢è¡ç¬¦åä¸ä¸ªåå·åéãæç»ï¼å®ä¼é¢ ååå顺åºï¼å§æ°é¦å
åºç°ï¼å list çç±»åã
// ä¸é¢è¿ä¸ªå§åå符串å
å«äºå¤ä¸ªç©ºæ ¼åå¶è¡¨ç¬¦ï¼
// ä¸å¨å§ååä¹é´å¯è½æå¤ä¸ªç©ºæ ¼åå¶è¡¨ç¬¦ã
var names = "Orange Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var output = ["---------- Original String\n", names + "\n"];
// åå¤ä¸¤ä¸ªæ¨¡å¼çæ£åè¡¨è¾¾å¼æ¾è¿æ°ç»éã
// åå²è¯¥å符串æ¾è¿æ°ç»éã
// å¹é
模å¼ï¼å¹é
ä¸ä¸ªåå·åç´§æ¥å
¶ååææå¯è½åºç°çè¿ç»çä¸å¯è§ç¬¦å·ã
var pattern = /\s*;\s*/;
// æéè¿ä¸è¿°å¹é
模å¼åå²çå符串æ¾è¿ä¸ä¸ªå«å nameList çæ°ç»éé¢ã
var nameList = names.split(pattern);
// æ°å»ºä¸ä¸ªå¹é
模å¼ï¼å¹é
ä¸ä¸ªæå¤ä¸ªè¿ç»çä¸å¯è§å符åå
¶ååç´§æ¥çç±
// ä¸ä¸ªæå¤ä¸ªè¿ç»çåºæ¬æä¸åæ¯è¡¨ä¸çåæ¯ãæ°ååä¸åçº¿ç»æçå符串
// ç¨ä¸å¯¹åæ¬å·æ¥æè·è¯¥æ¨¡å¼ä¸çä¸é¨åå¹é
ç»æã
// æè·çç»æç¨åä¼ç¨å°ã
pattern = /(\w+)\s+(\w+)/;
// æ°å»ºä¸ä¸ªæ°ç» bySurnameList ç¨æ¥ä¸´æ¶åæ¾æ£å¨å¤ççååã
var bySurnameList = [];
// è¾åº nameList çå
ç´ å¹¶ä¸æ nameList éçåå
// ç¨éå·æ¥ç©ºæ ¼çæ¨¡å¼æå§åååå²å¼æ¥ç¶ååæ¾è¿æ°ç» bySurnameList ä¸ã
//
// ä¸é¢çè¿ä¸ªæ¿æ¢æ¹æ³æ nameList éçå
ç´ ç¨ $2, $1 çæ¨¡å¼
//ï¼ç¬¬äºä¸ªæè·çå¹é
ç»æç´§æ¥çä¸ä¸ªéå·ä¸ä¸ªç©ºæ ¼ç¶åç´§æ¥ç第ä¸ä¸ªæè·çå¹é
ç»æï¼æ¿æ¢äº
// åé $1 ååé $2 æ¯ä¸é¢ææè·çå¹é
ç»æã
output.push("---------- After Split by Regular Expression");
var i, len;
for (i = 0, len = nameList.length; i < len; i++) {
output.push(nameList[i]);
bySurnameList[i] = nameList[i].replace(pattern, "$2, $1");
}
// è¾åºæ°çæ°ç»
output.push("---------- Names Reversed");
for (i = 0, len = bySurnameList.length; i < len; i++) {
output.push(bySurnameList[i]);
}
// æ ¹æ®å§æ¥æåºï¼ç¶åè¾åºæåºåçæ°ç»ã
bySurnameList.sort();
output.push("---------- Sorted");
for (i = 0, len = bySurnameList.length; i < len; i++) {
output.push(bySurnameList[i]);
}
output.push("---------- End");
console.log(output.join("\n"));
ç¨ç¹æ®å符æ£éªè¾å
¥
å¨ä»¥ä¸ä¾åä¸ï¼æä»¬ææç¨æ·è¾å ¥ä¸ä¸ªçµè¯å·ç ãå½ç¨æ·ç¹å»âCheckâæé®ï¼æä»¬çèæ¬å¼å§æ£æ¥è¿äºæ°åæ¯å¦åæ³ã妿æ°ååæ³ï¼å¹é æ£åè¡¨è¾¾å¼æè§å®çå符åºåï¼ï¼èæ¬æ¾ç¤ºä¸æ¡æè°¢ç¨æ·çä¿¡æ¯å¹¶ç¡®è®¤è¯¥æ°åã妿è¿ä¸²æ°åä¸åæ³ï¼èæ¬æç¤ºç¨æ·çµè¯å·ç ä¸åæ³ã
å
å«éæè·æ¬å· (?:
è¿ä¸ªæ£å表达å¼å¯»æ¾ä¸ä¸ªæ°åå符 \d{3}
æè
|
ä¸ä¸ªå·¦åæ¬å· \(
è·çä¸ä½æ°å \d{3}
, è·çä¸ä¸ªå°éæ¬å· \)
, (ç»æéæè·æ¬å· )
)ï¼åè·çä¸ä¸ªçç ´æå·ææ£ææ æå°æ°ç¹ï¼éåè·éä¸ä¸ªæ°åå符ï¼å½è®°å¿å符 ([-\/\.])
æè·å¹¶è®°ä½ï¼åé¢è·çä¸ä½å°æ° \d{3}
ï¼ååé¢è·éè®°ä½çç ´æå·ãæ£ææ æå°æ°ç¹ \1
ï¼æåè·çåä½å°æ° \d{4}
ã
å½ç¨æ·æä¸ Enter 设置 RegExp.inputï¼è¿äºååä¹è½è¢«æ¿æ´»ã
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript">
var re = /(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/;
function testInfo(phoneInput) {
var OK = re.exec(phoneInput.value);
if (!OK)
window.alert(
phoneInput.value + " isn't a phone number with area code!",
);
else window.alert("Thanks, your phone number is " + OK[0]);
}
</script>
</head>
<body>
<p>
Enter your phone number (with area code) and then click "Check". <br />The
expected format is like ###-###-####.
</p>
<form action="#">
<input id="phone" /><button
onclick="testInfo(document.getElementById('phone'));">
Check
</button>
</form>
</body>
</html>
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4