æè¨çç»æä¹ä¸æ¯è¾¹çãå¯¹äºææ¬ãè¯ææ¨¡å¼ï¼è¾¹çå¯ä»¥ç¨æ¥è¡¨æå®ä»¬çèµ·å§æç»æ¢é¨åï¼å¦å è¡æè¨ï¼åè¡æè¨ä»¥åæ¡ä»¶è¡¨è¾¾å¼ï¼ã
å°è¯ä¸ä¸const text = "A quick fox";
const regexpLastWord = /\w+$/;
console.log(text.match(regexpLastWord));
// Expected output: Array ["fox"]
const regexpWords = /\b\w+\b/g;
console.log(text.match(regexpWords));
// Expected output: Array ["A", "quick", "fox"]
const regexpFoxQuality = /\w+(?= fox)/;
console.log(text.match(regexpFoxQuality));
// Expected output: Array ["quick"]
ç±»å è¾¹çç±»æè¨ å符 å«ä¹ ^
å¹é
è¾å
¥çå¼å¤´ã妿å¤è¡æ¨¡å¼è®¾ä¸º trueï¼^
卿¢è¡ç¬¦åä¹è½ç«å³å¹é
ï¼æ¯å¦ /^A/
å¹é
ä¸äº "an A" éé¢ç "A"ï¼ä½æ¯å¯ä»¥å¹é
"An A" éé¢ç¬¬ä¸ä¸ª "A"ã
夿³¨ï¼æ¤å符åºç°å¨å符类å¼å¤´æ¶çå«ä¹ä¸æ¤ä¸åã
$
å¹é
è¾å
¥çç»æã妿å¤è¡æ¨¡å¼è®¾ä¸º trueï¼$
卿¢è¡ç¬¦åä¹è½ç«å³å¹é
ï¼æ¯å¦ /t$/
ä¸è½å¹é
"eater" ä¸ç "t"ï¼ä½æ¯å¯ä»¥å¹é
"eat" ä¸ç "t"ã
\b
å¹é ä¸ä¸ªåè¯çè¾¹çï¼è¿æ¯ä¸ä¸ªåçå符ååæ²¡æå¦ä¸ä¸ªåçå符ä½ç½®ï¼ä¾å¦å¨åæ¯åç©ºæ ¼ä¹é´ãéè¦æ³¨æçæ¯å¹é çåè¯è¾¹çä¸å æ¬å¨å¹é ä¸ãæ¢å¥è¯è¯´ï¼å¹é åè¾¹ççé¿åº¦ä¸ºé¶ã
ä¸äºä¾åï¼
/\bm/
å¨ "moon" ä¸å¹é
å° "m"/oo\b/
å¨ "moon" ä¸ä¸ä¼å¹é
å° "oo", å 为 "oo" åé¢è·ç "n" è¿ä¸ªåè¯å符ã/oon\b/
å¨ "moon" ä¸å¹é
"oon"ï¼å 为 "oon" æ¯è¿ä¸ªå符串çç»å°¾ï¼å æ¤å颿²¡æåè¯å符/\w\b\w/
å°æ°¸è¿ä¸ä¼å¹é
ä»»ä½ä¸è¥¿ï¼å 为ä¸ä¸ªåè¯å符å颿°¸è¿ä¸ä¼åæ¶æä¸ä¸ªéåè¯å符åä¸ä¸ªåè¯å符ãå¹é
éæ ¼å符 ([\b]
), æ¥ç å符类
\B
å¹é
éåè¯è¾¹çãè¿æ¯ä¸ä¸ä¸ªå符åä¸ä¸ä¸ªå符å±äºåä¸ç±»åçä½ç½®ï¼è¦ä¹ä¸¤è
é½å¿
é¡»æ¯åè¯ï¼è¦ä¹ä¸¤è
é½å¿
é¡»æ¯éåè¯ï¼ä¾å¦å¨ä¸¤ä¸ªåæ¯ä¹é´æä¸¤ä¸ªç©ºæ ¼ä¹é´ãå符串çå¼å¤´åç»å°¾è¢«è§ä¸ºéåè¯ãä¸å¹é
çè¯è¾¹çç¸åï¼å¹é
çéè¯è¾¹çä¹ä¸å
å«å¨å¹é
ä¸ãä¾å¦ï¼/\Bon/
å¨âat noonâä¸å¹é
âonâ ï¼/ye\B/
å¨ "possibly yesterday"ä¸å¹é
"ye" ã
夿³¨ï¼ ï¼
å符ä¹å¯ç¨ä½éè¯
å符
å«ä¹
x(?=y)
Jack(?=Sprat)
/ï¼âJackâå¨è·æâSpratâçæ
åµä¸æä¼å¾å°å¹é
ï¼/Jack(?=Sprat|Frost)/
âJackâåè·æâSpratâæâFrostâçæ
åµä¸æä¼å¾å°å¹é
ãä¸è¿ï¼ å¹é
ç»æä¸å
æ¬âSpratâæâFrostâã x(?!y) å
è¡å¦å®æè¨ï¼ x 没æè¢« y ç´§éæ¶å¹é
xãä¾å¦ï¼å¯¹äº/\d+(?!\.)/
ï¼æ°ååæ²¡æè·éå°æ°ç¹çæ
åµä¸æä¼å¾å°å¹é
ã对äº/\d+(?!\.)/.exec(3.141)
ï¼å¹é
â141âè䏿¯â3âã (?<=y)x åè¡æè¨ï¼ x è·é y çæ
åµä¸å¹é
xãä¾å¦ï¼å¯¹äº/(?<=Jack)Sprat/
ï¼âSpratâç´§éâJackâæ¶æä¼å¾å°å¹é
ã对äº/(?<=Jack|Tom)Sprat
ï¼âSpratâå¨ç´§éâJackâæâTomâçæ
åµä¸æä¼å¾å°å¹é
ãä¸è¿ï¼å¹é
ç»æä¸ä¸å
æ¬âJackâæâTomâã (?<!y)x åè¡å¦å®æè¨ï¼ x ä¸è·é y æ¶å¹é
xãä¾å¦ï¼å¯¹äº/(?<!-)\d+/
ï¼æ°åä¸ç´§é - 符å·çæ
åµä¸æä¼å¾å°å¹é
ã对äº/(?<!-)\d+/.exec(3)
ï¼â3âå¾å°å¹é
ã è/(?<!-)\d+/.exec(-3)
çç»ææ å¹é
ï¼è¿æ¯ç±äºæ°åä¹åæ - 符å·ã ç¤ºä¾ ä¸è¬è¾¹çç±»åæ¦è¿°ç¤ºä¾
// ä½¿ç¨æ£å表达å¼è¾¹çä¿®å¤é误å符串
buggyMultiline = `tey, ihe light-greon apple
tangs on ihe greon traa`;
// 1) ä½¿ç¨ $ ä¿®æ£å符串ç»å°¾å¤çå¹é
ã
buggyMultiline = buggyMultiline.replace(/^t/gim, "h");
console.log(1, buggyMultiline); // ä¿®å¤ 'tey' => 'hey' å 'tangs' => 'hangs'ï¼èä¸å¯¹ 'traa' åæ¹å¨ã
// 2) ä½¿ç¨ $ ä¿®æ£å符串ç»å°¾å¤çå¹é
ã
buggyMultiline = buggyMultiline.replace(/aa$/gim, "ee.");
console.log(2, buggyMultiline); // ä¿®å¤ 'traa' => 'tree.'ã
// 3) ä½¿ç¨ \b ä¿®æ£åè¯åç©ºæ ¼è¾¹çä¸çå符ã
buggyMultiline = buggyMultiline.replace(/\bi/gim, "t");
console.log(3, buggyMultiline); // ä¿®å¤ 'ihe' => 'the'ï¼èä¸å¯¹ 'light' åæ¹å¨ã
// 4) ä½¿ç¨ \B å¹é
å®ä½è¾¹çå
çå符ã
fixedMultiline = buggyMultiline.replace(/\Bo/gim, "e");
console.log(4, fixedMultiline); // ä¿®å¤ 'greon' => 'green'ï¼èä¸å¯¹ 'on' åæ¹å¨ã
ä½¿ç¨ ^ï¼æ§å¶å符ï¼å¹é
è¾å
¥çå¼å¤´
ä½¿ç¨ ^
å¹é
è¾å
¥çå¼å¤´ãå¨è¿ä¸ªä¾åä¸ï¼æä»¬å¯ä»¥éè¿ /^A/
æ£å表达å¼å¾å°ä»¥ A å¼å¤´çæ°´æã为äºéæ©åéçæ°´æï¼æä»¬å¯ä»¥ä½¿ç¨å¸¦æç®å¤´å½æ°çè¿æ»¤æ¹æ³ã
const fruits = ["Apple", "Watermelon", "Orange", "Avocado", "Strawberry"];
// ä½¿ç¨æ£å /^A/ 鿩以'A'å¼å¤´çæ°´æã
// è¿éç '^' åªæä¸ç§å«ä¹ï¼å¹é
è¾å
¥çå¼å¤´ã
const fruitsStartsWithA = fruits.filter((fruit) => /^A/.test(fruit));
console.log(fruitsStartsWithA); // [ 'Apple', 'Avocado' ]
å¨ç¬¬äºä¸ªç¤ºä¾ä¸ï¼^
æ¢ç¨äºå¨è¾å
¥å¼å¤´è¿è¡å¹é
ï¼ä¹ç¨äºå¨å符类ä¸ä½¿ç¨æ¶å建å符类补éã
const fruits = ["Apple", "Watermelon", "Orange", "Avocado", "Strawberry"];
// ä½¿ç¨æ£å /^[^A]/ éæ© 䏿¯ä»¥âAâå¼å¤´çæ°´æ
// å¨è¿ä¸ªä¾åä¸ï¼â^âæ§å¶ç¬¦å·è¡¨ç¤ºä¸¤ç§å«ä¹ï¼
// 1) å¹é
è¾å
¥çå¼å¤´
// 2) ä¸ä¸ªå¦å®çå符éï¼[^A]ï¼æææ¯å¹é
䏿¯âAâçå符
const fruitsStartsWithNotA = fruits.filter((fruit) => /^[^A]/.test(fruit));
console.log(fruitsStartsWithNotA); // [ 'Watermelon', 'Orange', 'Strawberry' ]
å¹é
åè¾¹ç
const fruitsWithDescription = ["Red apple", "Orange orange", "Green Avocado"];
// éæ©å
å«ä»¥âenâæâedâç»å°¾çåè¯çæè¿°ï¼
const enEdSelection = fruitsWithDescription.filter((descr) =>
/(en|ed)\b/.test(descr),
);
console.log(enEdSelection); // [ 'Red apple', 'Green Avocado' ]
å
è¡æè¨
// JS å
è¡æè¨ x(?=y) å¹é
被 y è·éç x
const regex = /First(?= test)/g;
console.log("First test".match(regex)); // [ 'First' ]
console.log("First peach".match(regex)); // null
console.log("This is a First test in a year.".match(regex)); // [ 'First' ]
console.log("This is a First peach in a month.".match(regex)); // null
å
è¡å¦å®æè¨
ä¾å¦ï¼ /\d+(?!\.)/
å¹é
没æè¢«å°æ°ç¹è·éä¸è³å°æä¸ä½çæ°åã /\d+(?!\.)/.exec('3.141')
å¹é
"141" è䏿¯ "3"
console.log(/\d+(?!\.)/g.exec("3.141")); // [ '141', index: 2, input: '3.141' ]
ä¸åå«ä¹çâ?!âï¼å¨æè¨åå符éä¸çç»åç¨æ³
å¨å /x(?!y)/
è¿æ ·çæè¨å [^?!]
è¿æ ·çå符类ä¸ï¼?!
ç»åå
·æä¸åçå«ä¹ã
const orangeNotLemon =
"Do you want to have an orange? Yes, I do not want to have a lemon!";
// æè¨ /x(?!y)/ åèå´ /[^?!]/ ä¸â?!âç»åç¨æ³çä¸åå«ä¹
const selectNotLemonRegex = /[^?!]+have(?! a lemon)[^?!]+[?!]/gi;
console.log(orangeNotLemon.match(selectNotLemonRegex)); // [ 'Do you want to have an orange?' ]
const selectNotOrangeRegex = /[^?!]+have(?! an orange)[^?!]+[?!]/gi;
console.log(orangeNotLemon.match(selectNotOrangeRegex)); // [ ' Yes, I do not want to have a lemon!' ]
åè¡æè¨
const oranges = ["ripe orange A", "green orange B", "ripe orange C"];
const ripeOranges = oranges.filter((fruit) => /(?<=ripe )orange/.test(fruit));
console.log(ripeOranges); // [ 'ripe orange A', 'ripe orange C' ]
åè§
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