Baseline Widely available *
RegExp
对象ç¨äºå°ææ¬ä¸ä¸ä¸ªæ¨¡å¼å¹é
ã
æå ³æ£å表达å¼çä»ç»ï¼è¯·é 读 JavaScript æåä¸çæ£å表达å¼ç« èã
æè¿° åé¢éåæé 彿°æä¸¤ç§æ¹æ³å¯ä»¥å建ä¸ä¸ª RegExp
对象ï¼ä¸ç§æ¯åé¢éï¼å¦ä¸ç§æ¯æé 彿°ã
ç±ææ (/) å å´è䏿¯å¼å·å å´ã
ç±å¼å·è䏿¯ææ å å´ã
以ä¸ä¸ç§è¡¨è¾¾å¼é½ä¼å建ç¸åçæ£å表达å¼ï¼
/ab+c/i; //åé¢éå½¢å¼
new RegExp("ab+c", "i"); // é¦ä¸ªåæ°ä¸ºå符串模å¼çæé 彿°
new RegExp(/ab+c/, "i"); // é¦ä¸ªåæ°ä¸ºå¸¸è§åé¢éçæé 彿°
å½è¡¨è¾¾å¼è¢«èµå¼æ¶ï¼åé¢é形弿便£å表达å¼çç¼è¯ï¼compilationï¼ç¶æï¼å½æ£å表达å¼ä¿æä¸ºå¸¸éæ¶ä½¿ç¨åé¢éãä¾å¦å½ä½ å¨å¾ªç¯ä¸ä½¿ç¨åé¢éæé ä¸ä¸ªæ£åè¡¨è¾¾å¼æ¶ï¼æ£å表达å¼ä¸ä¼å¨æ¯ä¸æ¬¡è¿ä»£ä¸é½è¢«éæ°ç¼è¯ï¼recompiledï¼ã
èæ£å表达å¼å¯¹è±¡çæé 彿°ï¼å¦ new RegExp('ab+c')
æä¾äºæ£å表达å¼è¿è¡æ¶ç¼è¯ï¼runtime compilationï¼ãå¦æä½ ç¥éæ£åè¡¨è¾¾å¼æ¨¡å¼å°ä¼æ¹åï¼æè
ä½ äºå
ä¸ç¥éä»ä¹æ¨¡å¼ï¼èæ¯ä»å¦ä¸ä¸ªæ¥æºè·åï¼å¦ç¨æ·è¾å
¥ï¼è¿äºæ
åµé½å¯ä»¥ä½¿ç¨æé 彿°ã
ä» ECMAScript 6 å¼å§ï¼å½ç¬¬ä¸ä¸ªåæ°ä¸ºæ£å表达å¼è第äºä¸ªæ å¿åæ°å卿¶ï¼new RegExp(/ab+c/, 'i')
ä¸åæåº TypeError
ï¼"ä»å¦ä¸ä¸ª RegExp æé ä¸ä¸ª RegExp æ¶æ æ³æä¾æ å¿"
ï¼çå¼å¸¸ï¼åè代ä¹ï¼å°ä½¿ç¨è¿äºåæ°å建ä¸ä¸ªæ°çæ£å表达å¼ã
å½ä½¿ç¨æé 彿°åé æ£å对象æ¶ï¼éè¦å¸¸è§çå符转ä¹è§åï¼å¨åé¢å åææ \
ï¼ã
æ¯å¦ï¼ä»¥ä¸æ¯çä»·çï¼
var re = new RegExp("\\w+");
var re = /\w+/;
Perl-like RegExp 屿§
请注æï¼RegExp
屿§æé¿åç§°åçåç§°ï¼ç±»ä¼¼ Perlï¼ã两个åç§°æ»æ¯å¼ç¨åä¸ä¸ªå¼ãï¼Perl æ¯ JavaScript 为å
¶æ£å表达å¼å»ºæ¨¡çç¼ç¨è¯è¨ï¼ãå¦è¯·åè§ä¸æ¨è使ç¨ç RegExp 屿§ã
RegExp()
å建ä¸ä¸ªæ°ç RegExp
对象ã
RegExp[Symbol.species]
该æé 彿°ç¨äºå建派ç对象ã
RegExp.lastIndex
该索å¼è¡¨ç¤ºä»åªéå¼å§ä¸ä¸ä¸ªå¹é
RegExp.prototype.flags
嫿 RegExp
对象 flags çå符串ã
RegExp.prototype.dotAll
.
æ¯å¦è¦å¹é
æ°è¡ï¼newlinesï¼ã
RegExp.prototype.global
é对åç¬¦ä¸²ä¸ææå¯è½çå¹é 项æµè¯æ£å表达å¼ï¼è¿æ¯ä» é对第ä¸ä¸ªå¹é 项ã
RegExp.prototype.ignoreCase
å¹é ææ¬çæ¶åæ¯å¦å¿½ç¥å¤§å°åã
RegExp.prototype.multiline
æ¯å¦è¿è¡å¤è¡æç´¢ã
RegExp.prototype.source
æ£å表达å¼çææ¬ã
RegExp.prototype.sticky
æç´¢æ¯å¦æ¯ stickyã
RegExp.prototype.unicode
Unicode åè½æ¯å¦å¼å¯ã
RegExp.prototype.compile()
è¿è¡èæ¬çæé´ï¼éæ°ï¼ç¼è¯æ£å表达å¼ã
RegExp.prototype.exec()
å¨è¯¥åç¬¦ä¸²ä¸æ§è¡å¹é 项çæç´¢ã
RegExp.prototype.test()
该æ£åå¨åç¬¦ä¸²éæ¯å¦æå¹é ã
RegExp.prototype[Symbol.match]()
对ç»å®å符串æ§è¡å¹é å¹¶è¿åå¹é ç»æã
RegExp.prototype[Symbol.matchAll]()
对ç»å®å符串æ§è¡å¹é ï¼è¿åææå¹é ç»æã
RegExp.prototype[Symbol.replace]()
ç»å®æ°çåä¸²ï¼æ¿æ¢ææå¹é ç»æã
RegExp.prototype[Symbol.search]()
å¨ç»å®åç¬¦ä¸²ä¸æç´¢å¹é 项ï¼å¹¶è¿åå¨åç¬¦ä¸²ä¸æ¾å°å符索å¼ã
RegExp.prototype[Symbol.split]()
éè¿å°ç»å®å符串æå为åå符串ï¼å¹¶è¿åå符串形æçæ°ç»ã
RegExp.prototype.toString()
è¿å表示æå®å¯¹è±¡çå符串ãéåObject.prototype.toString()
æ¹æ³ã
ä¸ä¾ä½¿ç¨ String
ç replace()
æ¹æ³å»å¹é
å§å first last è¾åºæ°çæ ¼å¼ last, firstã
卿¿æ¢çææ¬ä¸ï¼èæ¬ä¸ä½¿ç¨ $1
å $2
æææ¬å·éå
åçå¹é
ã
let re = /(\w+)\s(\w+)/;
let str = "John Smith";
let newstr = str.replace(re, "$2, $1");
console.log(newstr);
è¿å°æ¾ç¤º "Smith, John".
ä½¿ç¨æ£åæ¥åå带æå¤ç§è¡ç»æç¬¦åæ¢è¡ç¬¦çææ¬å¯¹äºä¸åçå¹³å°ï¼Unixï¼Windows ççï¼ï¼å ¶é»è®¤çè¡ç»æç¬¦æ¯ä¸ä¸æ ·çãèä¸é¢çååæ¹å¼éç¨äºææå¹³å°ã
let text = 'Some text\nAnd some more\r\nAnd yet\rThis is the end' let lines = text.split(/\r\n|\r|\n/) console.log(lines) // logs [ 'Some text', 'And some more', 'And yet', 'This is the end' ]
注æï¼å¨æ£å表达å¼ä¸ï¼ä»¥ç«çº¿åå²ç忍¡å¼ç顺åºä¼å½±åå¹é ç»æã
å¨å¤è¡ææ¬ä¸ä½¿ç¨æ£å表达å¼let s = "Please yes\nmake my day!";
s.match(/yes.*day/);
// Returns null
s.match(/yes[^]*day/);
// Returns 'yes\nmake my day'
使ç¨å¸¦æ sticky æ å¿çæ£å表达å¼
带æsticky
æ å¿çæ£å表达å¼å°ä¼ä»æºå符串çRegExp.prototype.lastIndex
ä½ç½®å¼å§å¹é
ï¼ä¹å°±æ¯è¿è¡âç²æ§å¹é
âã
let str = "#foo#";
let regex = /foo/y;
regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex is taken into account with sticky flag)
regex.lastIndex; // 0 (reset after match failure)
sticky æ å¿å global æ å¿çä¸åç¹
妿æ£åè¡¨è¾¾å¼æç²æ§ y
æ å¿ï¼ä¸ä¸æ¬¡å¹é
ä¸å®å¨ lastIndex
ä½ç½®å¼å§ï¼å¦ææ£åè¡¨è¾¾å¼æå
¨å± g
æ å¿ï¼ä¸ä¸æ¬¡å¹é
å¯è½å¨ lastIndex
ä½ç½®å¼å§ï¼ä¹å¯è½å¨è¿ä¸ªä½ç½®çåé¢å¼å§ã
re = /\d/y;
while ((r = re.exec("123 456")))
console.log(r, "AND re.lastIndex", re.lastIndex);
// [ '1', index: 0, input: '123 456', groups: undefined ] AND re.lastIndex 1
// [ '2', index: 1, input: '123 456', groups: undefined ] AND re.lastIndex 2
// [ '3', index: 2, input: '123 456', groups: undefined ] AND re.lastIndex 3
// ... and no more match.
å¦æä½¿ç¨å¸¦æå
¨å±æ å¿g
çæ£å表达å¼re
ï¼å°±ä¼æè·å符串ä¸çææ 6 个æ°åï¼èé 3 个
æ£å¦ä¸é¢è¡¨æ ¼æå°çï¼\w
æ \W
åªä¼å¹é
åºæ¬ç ASCII å符ï¼å¦ a
å° z
ã A
å° Z
ã 0
å° 9
å _
ã
为äºå¹é
å
¶ä»è¯è¨ä¸çå符ï¼å¦è¥¿éå°ï¼Cyrillicï¼æ å¸ä¼¯æ¥è¯ï¼Hebrewï¼ï¼è¦ä½¿ç¨ \uhhhh
ï¼hhhh
表示以åå
è¿å¶è¡¨ç¤ºçå符ç Unicode å¼ã
ä¸ä¾å±ç¤ºäºææ ·ä»ä¸ä¸ªåè¯ä¸åç¦»åº Unicode å符ã
let text = "ÐбÑÐ°Ð·ÐµÑ text на ÑÑÑÑком ÑзÑке";
let regex = /[\u0400-\u04FF]+/g;
let match = regex.exec(text);
console.log(match[0]); // prints "ÐбÑазеÑ"
console.log(regex.lastIndex); // prints "7"
let match2 = regex.exec(text);
console.log(match2[0]); // prints "на" [did not print "text"]
console.log(regex.lastIndex); // prints "15"
// and so on
Unicode 屿§è½¬ä¹ç¹æ§å¼å ¥äºä¸ç§è§£å³æ¹æ¡ï¼å®å 许使ç¨å\p{scx=Cyrl}è¿æ ·ç®åçè¯å¥ãè¿éæä¸ä¸ªå¤é¨èµæºï¼ç¨æ¥è·å Unicode ä¸çä¸ååºåèå´ï¼Regexp-unicode-block
ä» URL 䏿ååååvar url = "http://xxx.domain.com";
console.log(/[^.]+/.exec(url)[0].substr(7)); // logs "xxx"
夿³¨ï¼ ä½¿ç¨æµè§å¨å 建çURL APIè鿣åè¡¨è¾¾å¼æ¥è§£æ URL æ¯æ´å¥½çåæ³
è§è æµè§å¨å ¼å®¹æ§ åè§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