Odjeljci stranice
Izbor urednika:
- Geoinformacijske tehnologije Kako radi GIS
- Geografski informacijski sustav Vrste podataka koji se koriste u GIS-u
- replace() metoda s regularnim izrazom
- Prezentacija na temu John von Neumann John von Neumann preuzmi prezentaciju
- Upute “kako se prijaviti na portal međunarodne olimpijade “Globe” prema prometnim pravilima Službenik globus olimpijade za predškolce
- Predložak rasporeda lekcija za popunjavanje na računalu
- Kako odviknuti dijete od tableta?
- Struktura jednostavnog i složenog virusa
- Koncepti JAVA objektnog programiranja
- Što je informacijski rat
Oglašavanje
Javascript regularni izrazi. replace() metoda s regularnim izrazom |
Zadnja izmjena: 1.11.2015 Regularni izrazi predstavljaju uzorak koji se koristi za traženje ili modificiranje niza. Za rad s regularnim izrazima u JavaScriptu definiran je objekt RegExp. Postoje dva načina za definiranje regularnog izraza: Var myExp = /zdravo/; var myExp = new RegExp("zdravo"); Regularni izraz koji se ovdje koristi prilično je jednostavan: sastoji se od jedne riječi, "zdravo". U prvom slučaju, izraz se nalazi između dvije kose crte, au drugom slučaju se koristi RegExp konstruktor kojem se izraz prosljeđuje kao string. RegExp metodeKako bi se utvrdilo odgovara li regularni izraz nizu, objekt RegExp definira metodu test(). Ova metoda vraća true ako se niz podudara s regularnim izrazom, a false ako ne odgovara. Var initialText = "zdravo svijete!"; var exp = /zdravo/; var rezultat = exp.test(initialText); document.write(rezultat + " Metoda exec radi na sličan način - također provjerava odgovara li niz regularnom izrazu, samo što sada ova metoda vraća dio niza koji odgovara izrazu. Ako nema podudaranja, vraća se null. Var initialText = "zdravo svijete!"; var exp = /zdravo/; var rezultat = exp.exec(initialText); document.write(rezultat + " Grupe znakovaRegularni izraz ne sastoji se nužno od regularnih nizova, ali može uključivati i posebne elemente sintakse regularnog izraza. Jedan takav element predstavljen je skupinama znakova u uglastim zagradama. Na primjer: Var initialText = "defenzivnost"; var exp = /[abc]/; var rezultat = exp.test(initialText); document.write(rezultat + " Izraz [abc] označava da niz mora imati jedno od tri slova. Ako trebamo utvrditi prisutnost abecednih znakova iz određenog raspona u nizu, tada taj raspon možemo navesti jednom: Var initialText = "defenzivnost"; var exp = /[a-z]/; var rezultat = exp.test(initialText); document.write(rezultat + " U tom slučaju niz mora sadržavati barem jedan znak iz raspona a-z. Ako, naprotiv, ne želite da redak ima samo određene znakove, tada trebate staviti znak ^ u uglate zagrade prije navođenja znakova: Var initialText = "defenzivnost"; var exp = /[^a-z]/; var rezultat = exp.test(initialText); document.write(rezultat + " U prvom slučaju string ne bi trebao sadržavati samo znakove iz raspona a-z, ali kako se string "defensiveness" sastoji samo od znakova iz tog raspona, metoda test() vraća false, odnosno regularni izraz ne odgovara odvoditi. U drugom slučaju ("3di0789") niz se ne smije sastojati samo od numeričkih znakova. Ali budući da niz također sadrži slova, niz odgovara regularnom izrazu, tako da test metoda vraća true. Ako je potrebno, možemo prikupiti kombinacije izraza: Var initialText = "home"; var exp = /[dt]o[nm]/; var rezultat = exp.test(initialText); document.write(rezultat); // istina Izraz [dt]o[nm] označava one retke koji mogu sadržavati podstringove "house", "volume", "don", "ton". Svojstva izrazaGlobalno svojstvo omogućuje vam da pronađete sve podnizove koji odgovaraju regularnom izrazu. Prema zadanim postavkama, pri traženju podnizova, regularni izraz odabire prvi podniz iz niza koji odgovara izrazu. Iako u nizu može postojati mnogo podnizova koji također odgovaraju izrazu. Da biste to učinili, koristite ovo svojstvo u obliku simbola g u izrazima Svojstvo ignoreCase omogućuje vam pronalaženje podnizova koji odgovaraju regularnom izrazu, bez obzira na velika i mala slova znakova u nizu. Da biste to učinili, znak i koristi se u regularnim izrazima Svojstvo multiline omogućuje vam pronalaženje podnizova koji odgovaraju regularnom izrazu u višerednom tekstu. Za to se u regularnim izrazima koristi simbol m Na primjer: Var initialText = "zdravo svijetu"; var exp = /svijet/; var rezultat = exp.test(initialText); // lažno Ovdje nema podudaranja između niza i izraza, budući da se "Svijet" razlikuje od "svijeta" u velikim i malim slovima. U ovom slučaju trebate promijeniti regularni izraz dodavanjem svojstva ignoreCase: Var exp = /world/i; Pa, također možemo koristiti nekoliko svojstava odjednom. Klasa RegExp u JavaScriptu je regularni izraz - objekt koji opisuje uzorak znakova. Objekti RegExp obično se stvaraju korištenjem posebne sintakse literala predstavljene u nastavku, ali se mogu izraditi i pomoću konstruktora RegExp(). Sintaksa// koristeći posebnu sintaksu literala var regex = /uzorak /zastavice; // korištenjem konstruktora var regex = new RegExp("uzorak ", "zastavice"); var regex = new RegExp(/pattern /, "flags ");Vrijednosti parametara: Oznake regularnog izraza
Skupovi znakovaMetakarakteri
OgraničenjaKvantifikatori
Grupiranje i povratne veze
Neki ljudi, kada se suoče s problemom, pomisle: "Oh, upotrijebit ću regularne izraze." Sada imaju dva problema. Yuan-Ma je rekao: “Potrebno je puno sile da se drvo prereže poprečno. Potrebno je puno koda za programiranje preko strukture problema. Alati i tehnike programiranja opstaju i šire se na kaotičan evolucijski način. Ponekad ne prežive oni lijepi i briljantni, već jednostavno oni koji dovoljno dobro rade u svom području – primjerice, ako su integrirani u drugu uspješnu tehnologiju. U ovom poglavlju raspravljat ćemo o takvom alatu - regularnim izrazima. Ovo je način za opisivanje uzoraka u podacima niza. Oni stvaraju mali, samostalni jezik koji je uključen u JavaScript i mnoge druge jezike i alate. Redovni rasporedi su i vrlo čudni i iznimno korisni. Njihova je sintaksa zagonetna, a JavaScript programsko sučelje nezgrapno. Ali to je moćan alat za istraživanje i manipuliranje nizovima. Nakon što ih shvatite, postat ćete učinkovitiji programer. Stvaranje regularnog izrazaRegular – vrsta objekta. Može se izraditi pozivom RegExp konstruktora ili pisanjem željenog predloška, okruženog kosim crtama.Var re1 = novi RegExp("abc"); var re2 = /abc/; Oba ova regularna izraza predstavljaju isti obrazac: znak "a" nakon kojeg slijedi znak "b" nakon kojeg slijedi znak "c". Ako koristite RegExp konstruktor, tada se uzorak piše kao uobičajeni niz, tako da se primjenjuju sva pravila koja se odnose na obrnute kose crte. Drugi unos, gdje je uzorak između kosih crta, drugačije tretira obrnute kose crte. Prvo, budući da uzorak završava kosom crtom, moramo staviti obrnutu kosu crtu ispred kose crte koju želimo uključiti u naš uzorak. Osim toga, obrnute kose crte koje nisu dio posebnih znakova poput \n bit će sačuvane (umjesto zanemarene kao u nizovima) i promijenit će značenje uzorka. Neki znakovi, poput upitnika ili plusa, imaju posebno značenje u regularnim izrazima, a ako trebate pronaći takav znak, ispred njega također mora stajati obrnuta kosa crta. Var osamnaestPlus = /osamnaest\+/; Da biste znali ispred kojih znakova mora stajati kosa crta, morate naučiti popis svih posebnih znakova u regularnim izrazima. To još nije moguće, pa ako ste u nedoumici, samo stavite obrnutu kosu crtu ispred bilo kojeg znaka koji nije slovo, broj ili razmak. Provjera podudarnostiRedoviti korisnici imaju nekoliko metoda. Najjednostavniji je test. Ako mu proslijedite niz, vratit će Booleovu vrijednost koja pokazuje sadrži li niz pojavljivanje zadanog uzorka.Console.log(/abc/.test("abcde")); // → istina console.log(/abc/.test("abxde")); // → lažno Pravilni niz koji se sastoji samo od nespecijalnih znakova jednostavno je niz ovih znakova. Ako je abc bilo gdje u retku koji testiramo (ne samo na početku), test će vratiti true. Tražite skup znakovaTakođer možete saznati sadrži li niz abc pomoću indexOf. Uobičajeni uzorci omogućuju vam da idete dalje i stvorite složenije uzorke.Recimo da trebamo pronaći bilo koji broj. Kada u regularnom izrazu stavimo skup znakova u uglate zagrade, to znači da taj dio izraza odgovara bilo kojem od znakova u zagradama. Oba izraza su u redovima koji sadrže broj. Console.log(//.test("1992")); // → istina console.log(//.test("1992.")); // → istina U uglatim zagradama, crtica između dva znaka koristi se za određivanje raspona znakova, gdje je niz određen Unicode kodiranjem. Znakovi od 0 do 9 nalaze se samo u nizu (kodovi od 48 do 57), tako da ih sve hvata i odgovara bilo kojem broju. Nekoliko grupa znakova ima vlastite ugrađene kratice. \d Bilo koji broj Dakle, možete postaviti format datuma i vremena kao što je 01/30/2003 15:20 sa sljedećim izrazom: Var dateTime = /\d\d-\d\d-\d\d\d\d \d\d:\d\d/; console.log(dateTime.test("30-01-2003 15:20")); // → istina console.log(dateTime.test("30. siječnja 2003. 15:20")); // → lažno Izgleda užasno, zar ne? Ima previše obrnutih kosih crta, što čini uzorak teškim za razumijevanje. Kasnije ćemo ga malo poboljšati. Obrnute kose crte također se mogu koristiti u uglatim zagradama. Na primjer, [\d.] znači bilo koji broj ili točku. Primijetite da točka unutar uglatih zagrada gubi svoje posebno značenje i postaje jednostavno točka. Isto vrijedi i za druge posebne znakove, kao što je +. Možete invertirati skup znakova - to jest, reći da trebate pronaći bilo koji znak osim onih koji su u skupu - stavljanjem znaka ^ odmah iza početne uglate zagrade. Var notBinary = /[^01]/; console.log(notBinary.test("1100100010100110")); // → false console.log(notBinary.test("1100100010200110")); // → istina Ponavljanje dijelova predloškaZnamo kako pronaći jedan broj. Što ako trebamo pronaći cijeli broj - niz od jedne ili više znamenki?Ako stavite znak + iza nečega u redovnom nizu, to će značiti da se taj element može ponoviti više puta. /\d+/ znači jednu ili više znamenki. Console.log(/"\d+"/.test(""123"")); // → istina console.log(/"\d+"/.test("""")); // → false console.log(/"\d*"/.test(""123"")); // → istina console.log(/"\d*"/.test("""")); // → istina Zvjezdica * ima gotovo isto značenje, ali dopušta da se uzorak pojavi nula puta. Ako iza nečega slijedi zvjezdica, to nikada ne sprječava da uzorak bude u retku - samo se tamo pojavljuje nula puta. Upitnik čini dio uzorka neobveznim, što znači da se može pojaviti nula ili jednom. U sljedećem primjeru, znak u se može pojaviti, ali uzorak se podudara čak i kada se ne podudara. Var susjed = /neighbou?r/; console.log(neighbor.test("neighbor")); // → istina console.log(neighbor.test("neighbor")); // → istina Vitičaste zagrade koriste se za određivanje točnog broja puta kada se uzorak mora pojaviti. (4) iza elementa znači da se mora pojaviti 4 puta u retku. Također možete odrediti prazninu: (2,4) znači da se element mora pojaviti najmanje 2 i ne više od 4 puta. Druga verzija formata datuma i vremena, gdje su dopušteni dani, mjeseci i sati s jednom ili dvije znamenke. A također je i malo čitljiviji. Var dateTime = /\d(1,2)-\d(1,2)-\d(4) \d(1,2):\d(2)/; console.log(dateTime.test("30-1-2003 8:45")); // → istina Otvorene razmake možete koristiti izostavljanjem jednog od brojeva. (,5,) znači da se obrazac može pojaviti od nula do pet puta, a (5,) znači od pet ili više puta. Grupiranje podizražajaZa upotrebu operatora * ili + na više elemenata odjednom, možete koristiti zagrade. Dio regularnog izraza u zagradama smatra se jednim elementom sa stajališta operatora.Var cartoonCrying = /boo+(hoo+)+/i; console.log(cartoonCrying.test("Boohoooohoohooo")); // → istina Prvi i drugi plus odnose se samo na drugo o u boo i hoo. Treći + odnosi se na cijelu grupu (hoo+), pronalaženje jedne ili više takvih sekvenci. Slovo i na kraju izraza čini regularni izraz neosjetljivim na velika i mala slova - tako da B odgovara b. Utakmice i grupeTest metoda je najjednostavnija metoda za provjeru regularnih izraza. Ono vam samo govori je li pronađeno podudaranje ili ne. Regulari također imaju exec metodu, koja će vratiti null ako ništa nije pronađeno, a inače će vratiti objekt s informacijama o podudaranju.Var match = /\d+/.exec("jedan dva 100"); konzola.log(podudaranje); // → ["100"] console.log(match.index); // → 8 Objekt koji vraća exec ima svojstvo indeksa koje sadrži broj znaka iz kojeg je došlo do podudaranja. Općenito, objekt izgleda kao niz nizova, gdje je prvi element niz za koji je provjereno da se podudara. U našem primjeru, ovo će biti niz brojeva koje smo tražili. Nizovi imaju metodu podudaranja koja radi na gotovo isti način. Console.log("jedan dva 100".match(/\d+/)); // → ["100"] Kada regularni izraz sadrži podizraze grupirane u zagradama, tekst koji odgovara tim grupama također će se pojaviti u nizu. Prvi element uvijek se potpuno podudara. Drugi je dio koji odgovara prvoj skupini (onoj čije su se zagrade prve pojavile), zatim drugoj skupini i tako dalje. VarquotedText = /"([^"]*)"/; console.log(quotedText.exec("ona je rekla "zdravo"")); // → [""zdravo"", "zdravo"] Kada grupa uopće nije pronađena (na primjer, ako je iza nje upitnik), njezina pozicija u nizu je nedefinirana. Ako se grupa podudara nekoliko puta, tada će samo zadnje podudaranje biti u nizu. Console.log(/bad(ly)?/.exec("bad")); // → ["loše", nedefinirano] console.log(/(\d)+/.exec("123")); // → ["123", "3"] Grupe su korisne za dohvaćanje dijelova nizova. Ako ne želimo samo provjeriti ima li niz datum, već ga ekstrahirati i stvoriti objekt koji predstavlja datum, možemo staviti niz brojeva u zagrade i odabrati datum iz rezultata exec. Ali prvo, mala digresija u kojoj ćemo naučiti preferirani način pohranjivanja datuma i vremena u JavaScriptu. Vrsta datumaJavaScript ima standardnu vrstu objekta za datume—točnije, trenutke u vremenu. Zove se Datum. Ako jednostavno kreirate objekt datuma koristeći new, dobit ćete trenutni datum i vrijeme.Console.log(novi datum()); // → Ned, 9. studenog 2014. 00:07:57 GMT+0300 (CET) Također možete stvoriti objekt koji sadrži određeno vrijeme Console.log(novi datum(2015, 9, 21)); // → Srijeda, 21. listopada 2015. 00:00:00 GMT+0300 (CET) console.log(novi datum(2009, 11, 9, 12, 59, 59, 999)); // → srijeda, 9. prosinca 2009. 12:59:59 GMT+0300 (CET) JavaScript koristi konvenciju prema kojoj brojevi mjeseci počinju s nulom, a brojevi dana s jedinicom. Ovo je glupo i smiješno. Budi oprezan. Zadnja četiri argumenta (sati, minute, sekunde i milisekunde) nisu obavezna i postavljaju se na nulu ako nedostaju. Vremenske oznake pohranjuju se kao broj milisekundi koje su prošle od početka 1970. Za vremena prije 1970. koriste se negativni brojevi (to je zbog konvencije vremena Unixa koja je stvorena otprilike u to vrijeme). Metoda getTime objekta datuma vraća ovaj broj. Prirodno je velik. Ako konstruktoru datuma date jedan argument, on se tretira kao ovaj broj milisekundi. Trenutnu vrijednost milisekunde možete dobiti stvaranjem objekta Date i pozivanjem metode getTime ili pozivanjem funkcije Date.now. Objekt Date ima metode getFullYear, getMonth, getDate, getHours, getMinutes i getSeconds za dohvaćanje njegovih komponenti. Postoji i metoda getYear koja vraća prilično beskoristan dvoznamenkasti kod poput 93 ili 14. Stavljanjem relevantnih dijelova predloška u zagrade, možemo stvoriti datumski objekt izravno iz niza. Funkcija findDate(string) ( var dateTime = /(\d(1,2))-(\d(1,2))-(\d(4))/; var match = dateTime.exec(string); return novi Datum(Broj(podudaranje), Broj(podudaranje) - 1, Broj(podudaranje)); ) console.log(findDate("30-1-2003")); // → čet, 30. siječnja 2003. 00:00:00 GMT+0100 (CET) Granice riječi i redakaNažalost, findDate će jednako sretno izvući besmisleni datum 00-1-3000 iz niza "100-1-30000". Podudaranje se može dogoditi bilo gdje u nizu, tako da će u ovom slučaju jednostavno započeti na drugom znaku i završiti na pretposljednjem znaku.Ako trebamo prisiliti podudaranje da uzme cijeli niz, koristimo oznake ^ i $. ^ odgovara početku retka, a $ kraju. Stoga, /^\d+$/ odgovara nizu koji sadrži samo jednu ili više znamenki, /^!/ odgovara nizu koji počinje s uskličnikom, a /x^/ ne odgovara nijednom nizu (ne može biti x). Ako, s druge strane, samo želimo biti sigurni da datum počinje i završava na granici riječi, koristimo oznaku \b. Granica riječi može biti početak ili kraj retka ili bilo koje mjesto u retku gdje se s jedne strane nalazi alfanumerički znak \w, a s druge strane nealfanumerički znak. Console.log(/cat/.test("concatenate")); // → true console.log(/\bcat\b/.test("concatenate")); // → lažno Imajte na umu da oznaka granice nije simbol. To je jednostavno ograničenje, što znači da se podudaranje događa samo ako je ispunjen određeni uvjet. Predlošci s izboromRecimo da trebate saznati sadrži li tekst ne samo broj, već broj iza kojeg slijedi svinja, krava ili kokoš u jednini ili množini.Bilo bi moguće napisati tri regularna izraza i provjeriti ih jedan po jedan, ali postoji bolji način. Simbol | označava izbor između uzoraka lijevo i desno od njega. I možemo reći sljedeće: Var animalCount = /\b\d+ (svinja|krava|kokoš)s?\b/; console.log(animalCount.test("15 svinja")); // → istina console.log(animalCount.test("15 pigchickens")); // → lažno Zagrade ograničavaju dio uzorka na koji se | primjenjuje, a mnogi takvi operatori mogu se postaviti jedan za drugim kako bi označili izbor između više od dvije opcije. PretraživačRegularni izrazi mogu se smatrati dijagramima toka. Sljedeći dijagram opisuje nedavni primjer stoke.Izraz odgovara nizu ako je moguće pronaći put od lijeve strane dijagrama do desne. Pamtimo trenutnu poziciju u retku i svaki put kada prolazimo kroz pravokutnik provjeravamo da dio retka odmah iza naše pozicije u njemu odgovara sadržaju pravokutnika. To znači da provjera podudaranja našeg uobičajenog znaka u nizu "3 praseta" prilikom prolaska kroz dijagram toka izgleda ovako: Na poziciji 4 nalazi se granica riječi, a prolazimo prvi pravokutnik U osnovi, regularni izrazi funkcioniraju tako da algoritam počinje na početku niza i tamo pokušava pronaći podudaranje. U našem slučaju, postoji granica riječi, pa prolazi prvi pravokutnik - ali tamo nema broja, pa se spotiče o drugi pravokutnik. Zatim se pomiče na drugi znak u nizu i pokušava tamo pronaći podudaranje... I tako dalje dok ne pronađe podudaranje ili ne dođe do kraja niza, u kojem slučaju nije pronađeno podudaranje. ProvizijeRegularni izraz /\b(+b|\d+|[\da-f]h)\b/ odgovara ili binarnom broju iza kojeg slijedi b, decimalnom broju bez sufiksa ili heksadecimalnom broju (brojevi od 0 do 9 ili simboli od a do h), a zatim h. Relevantni dijagram:Prilikom traženja podudaranja može se dogoditi da algoritam krene gornjom stazom (binarni broj), čak i ako u nizu nema takvog broja. Ako postoji redak “103”, na primjer, jasno je da će tek nakon što dođe do broja 3 algoritam shvatiti da je na krivom putu. Općenito, linija odgovara redovnom nizu, samo ne u ovoj temi. Tada se algoritam vraća natrag. Na račvanju pamti trenutnu poziciju (u našem slučaju to je početak retka, odmah iza granice riječi) tako da se možete vratiti i pokušati drugim putem ako odabrani ne radi. Za niz “103”, nakon što naiđe na trojku, vratit će se i pokušati proći kroz decimalni put. Ovo će funkcionirati pa će se pronaći podudaranje. Algoritam se zaustavlja čim pronađe potpuno podudaranje. To znači da čak i ako je nekoliko opcija prikladno, koristi se samo jedna od njih (redoslijedom kojim se pojavljuju u redovnom nizu). Vraćanje se događa kada se koriste operatori ponavljanja kao što su + i *. Ako tražite /^.*x/ u nizu "abcxe", regex dio.* će pokušati iskoristiti cijeli niz. Algoritam će tada shvatiti da treba i "x". Budući da nema "x" nakon kraja niza, algoritam će pokušati potražiti podudaranje pomicanjem za jedan znak unatrag. Nakon abcx također nema x, zatim se ponovno vraća, ovaj put na podniz abc. I nakon retka, pronalazi x i prijavljuje uspješno podudaranje, na pozicijama od 0 do 4. Možete napisati redovitu rutinu koja će dovesti do višestrukih vraćanja. Ovaj se problem pojavljuje kada se uzorak može podudarati s unosom na mnogo različitih načina. Na primjer, ako pogriješimo prilikom pisanja regularnog izraza za binarne brojeve, mogli bismo slučajno napisati nešto poput /(+)+b/. Kad bi algoritam tražio takav uzorak u dugom nizu 0 i 1 koji nema "b" na kraju, prvo bi prošao kroz unutarnju petlju dok ne bi ostao bez znamenki. Tada će primijetiti da nema “b” na kraju, vratit će se jednu poziciju unatrag, proći kroz vanjsku petlju, opet odustati, pokušati se vratiti na drugu poziciju po unutarnjoj petlji... I nastavit će za pretraživanje na ovaj način, koristeći obje petlje. Odnosno, količina rada sa svakim znakom retka će se udvostručiti. Čak i za nekoliko desetaka znakova, pronalaženje podudaranja trajat će jako dugo. način zamjeneNizovi imaju metodu zamjene koja može zamijeniti dio niza drugim nizom.Console.log("tata".replace("p", "m")); // → karta Prvi argument također može biti regularni izraz, u kojem slučaju se prvo pojavljivanje regularnog izraza u retku zamjenjuje. Kada se regularnom izrazu doda opcija “g” (globalno), zamjenjuju se sva pojavljivanja, a ne samo prva Console.log("Borobudur".replace(//, "a")); // → Barobudur console.log("Borobudur".replace(//g, "a")); // → Barabadar Imalo bi smisla proslijediti opciju "zamijeni sve" kroz zasebni argument ili kroz posebnu metodu kao što je replaceAll. No, nažalost, opcija se prenosi kroz sam redovni sustav. Puna snaga regularnih izraza otkriva se kada koristimo veze na grupe koje se nalaze u nizu, specificirane u regularnom izrazu. Na primjer, imamo redak koji sadrži imena ljudi, jedno ime po retku, u formatu "Prezime, Ime". Ako ih trebamo zamijeniti i ukloniti zarez da bismo dobili "Ime Prezime", pišemo sljedeće: Console.log("Hopper, Grace\nMcCarthy, John\nRitchie, Dennis" .replace(/([\w ]+), ([\w ]+)/g, "$2 $1")); // → Grace Hopper // John McCarthy // Dennis Ritchie $1 i $2 u zamjenskom retku odnose se na grupe znakova unutar zagrada. $1 se zamjenjuje tekstom koji odgovara prvoj grupi, $2 drugom grupom i tako dalje, do $9. Cijelo podudaranje sadržano je u varijabli $&. Također možete proslijediti funkciju kao drugi argument. Za svaku zamjenu bit će pozvana funkcija čiji će argumenti biti pronađene grupe (i cijeli odgovarajući dio retka), a njezin rezultat bit će umetnut u novi red. Jednostavan primjer: Var s = "CIA i FBI"; console.log(s.replace(/\b(fbi|cia)\b/g, function(str) ( return str.toUpperCase(); ))); // → CIA i FBI Evo jednog zanimljivijeg: Var stock = "1 limun, 2 kupusa i 101 jaje"; funkcija minusOne(podudaranje, iznos, jedinica) ( iznos = Broj(iznos) - 1; if (iznos == 1) // preostaje samo jedan, uklonite "s" na kraju unit = unit.slice(0, unit. duljina - 1); inače ako (iznos == 0) iznos = "ne"; vrati iznos + " " + jedinica; ) console.log(stock.replace(/(\d+) (\w+)/g, minusOne) ); // → bez limuna, 1 kupus i 100 jaja Kod uzima niz, pronalazi sva pojavljivanja brojeva iza kojih slijedi riječ i vraća niz sa svakim brojem smanjenim za jedan. Grupa (\d+) ide u argument količine, a (\w+) ide u argument jedinice. Funkcija pretvara iznos u broj - i to uvijek radi, jer je naš obrazac \d+. A zatim mijenja riječ, u slučaju da je preostala samo 1 stavka. PohlepaLako je koristiti replace za pisanje funkcije koja uklanja sve komentare iz JavaScript koda. Evo prvog pokušaja:Funkcija stripComments(code) ( return code.replace(/\/\/.*|\/\*[^]*\*\//g, ""); ) console.log(stripComments("1 + /* 2 */3")); // → 1 + 3 console.log(stripComments("x = 10;// deset!")); // → x = 10; console.log(stripComments("1 /* a */+/* b */ 1")); // → 1 1 Dio prije operatora "ili" odgovara dvjema kosim crtama nakon kojih slijedi bilo koji broj znakova osim novih redaka. Dio koji uklanja višeredne komentare je složeniji. Koristimo [^], tj. bilo koji znak koji nije prazan kao način da se pronađe bilo koji znak. Ne možemo koristiti točku jer se blok komentari nastavljaju u novom retku, a znak novog retka ne odgovara točki. Ali rezultat prethodnog primjera nije točan. Zašto? Dio [^]* prvo će pokušati uhvatiti što više znakova. Ako zbog toga sljedeći dio regularnog niza ne pronađe podudaranje, vratit će jedan znak unatrag i pokušati ponovno. U primjeru, algoritam pokušava uhvatiti cijelu liniju, a zatim se vraća natrag. Vrativši 4 znaka unatrag, pronaći će */ u retku - a to nije ono što smo htjeli. Htjeli smo uhvatiti samo jedan komentar, a ne ići na kraj retka i pronaći posljednji komentar. Zbog toga kažemo da su operatori ponavljanja (+, *, ? i ()) pohlepni, što znači da prvo zgrabe što više mogu, a zatim se vrate. Ako postavite pitanje nakon ovakvog operatora (+?, *?, ??, ()?), oni će se pretvoriti u nepohlepne i početi pronalaziti najmanje moguće pojavljivanja. A to je ono što nam treba. Prisiljavanjem zvjezdice da pronađe podudaranja u minimalnom mogućem broju znakova u retku, trošimo samo jedan blok komentara, i ništa više. Funkcija stripComments(code) ( return code.replace(/\/\/.*|\/\*[^]*?\*\//g, ""); ) console.log(stripComments("1 /* a */+/* b */ 1")); // → 1 + 1 Mnoge se pogreške pojavljuju kada se koriste pohlepni operatori umjesto onih koji nisu pohlepni. Kada koristite operator ponavljanja, uvijek prvo razmislite o nepohlepnom operatoru. Dinamičko stvaranje RegExp objekataU nekim slučajevima, točan uzorak je nepoznat u trenutku kada je kod napisan. Na primjer, morat ćete potražiti ime korisnika u tekstu i staviti ga u podvlaku. Budući da ćete ime znati tek nakon pokretanja programa, ne možete koristiti kosu crtu.Ali možete konstruirati niz i koristiti RegExp konstruktor. Evo primjera: Var name = "harry"; var text = "A Harry ima ožiljak na čelu."; var regexp = new RegExp("\\b(" + name + ")\\b", "gi"); console.log(text.replace(regexp, "_$1_")); // → A _Harry_ ima ožiljak na čelu. Kada stvaramo granice riječi, moramo koristiti dvostruke kose crte jer ih pišemo u normalnom retku, a ne u pravilnom nizu s kosim crtama naprijed. Drugi argument za RegExp sadrži opcije za regularne izraze - u našem slučaju "gi", tj. globalno i neosjetljivo na velika i mala slova. Ali što ako je ime “dea+hlrd” (ako je naš korisnik kulhatzker)? Kao rezultat, dobit ćemo besmisleni regularni izraz koji neće pronaći podudaranja u nizu. Možemo dodati obrnute kose crte prije bilo kojeg znaka koji nam se ne sviđa. Ne možemo dodati obrnute kose crte prije slova jer su \b ili \n posebni znakovi. Ali možete bez problema dodati kose crte ispred bilo kojeg nealfanumeričkog znaka. Var name = "dea+hlrd"; var text = "Ovaj dea+hlrd svima smeta."; var escaped = name.replace(/[^\w\s]/g, "\\$&"); var regexp = new RegExp("\\b(" + escaped + ")\\b", "gi"); console.log(text.replace(regexp, "_$1_")); // → Ova _dea+hlrd_ je sve iznervirala. metoda pretraživanjaMetoda indexOf ne može se koristiti s regularnim izrazima. Ali postoji metoda pretraživanja koja samo očekuje regularni izraz. Kao i indexOf, vraća indeks prvog pojavljivanja ili -1 ako se ništa ne dogodi.Console.log(" riječ".pretraži(/\S/)); // → 2 console.log(" ".search(/\S/)); // → -1 Nažalost, ne postoji način da kažete metodi da traži podudaranje počevši od određenog pomaka (kao što možete učiniti s indexOf). To bi bilo od pomoći. svojstvo lastIndexMetoda exec također ne pruža prikladan način za početak pretraživanja od zadane pozicije u nizu. Ali daje nezgodan način.Objekt regularnog izraza ima svojstva. Jedan od njih je izvor, koji sadrži string. Drugi je lastIndex, koji kontrolira, pod nekim uvjetima, gdje će započeti sljedeća potraga za pojavljivanjima. Ovi uvjeti uključuju da globalna opcija g mora biti prisutna i da se pretraga mora izvršiti koristeći exec metodu. Razumnije rješenje bilo bi jednostavno dopustiti da se dodatni argument proslijedi exec-u, ali razumnost nije temeljna značajka sučelja JavaScript regularnog izraza. Var pattern = /y/g; pattern.lastIndex = 3; var match = pattern.exec("xyzzy"); console.log(match.index); // → 4 console.log(pattern.lastIndex); // → 5 Ako je pretraživanje bilo uspješno, exec poziv ažurira svojstvo lastIndex da pokazuje na poziciju nakon pronađene pojave. Ako nije bilo uspjeha, lastIndex se postavlja na nulu - baš kao i lastIndex novostvorenog objekta. Kada koristite globalnu regularnu varijablu i višestruke exec pozive, ova automatska ažuriranja lastIndexa mogu uzrokovati probleme. Vaš uobičajeni poslužitelj može započeti pretraživanje s pozicije lijevo od prethodnog poziva. Var znamenka = /\d/g; console.log(digit.exec("ovdje je: 1")); // → ["1"] console.log(digit.exec("i sada: 1")); // → nula Još jedan zanimljiv učinak opcije g je da mijenja način rada metode podudaranja. Kada se pozove s ovom opcijom, umjesto vraćanja niza sličnog rezultatu exec, pronalazi sva pojavljivanja uzorka u nizu i vraća niz pronađenih podnizova. Console.log("Banana".match(/an/g)); // → ["an", "an"] Stoga budite oprezni s globalnim regularnim varijablama. Slučajevi u kojima su potrebni - zamjena poziva ili mjesta gdje posebno koristite lastIndex - vjerojatno su svi slučajevi u kojima bi se trebali koristiti. Ciklusi pojavljivanjaTipičan zadatak je iteracija kroz sva pojavljivanja uzorka u nizu tako da može pristupiti objektu podudaranja u tijelu petlje koristeći lastIndex i exec. Var input = "Red s 3 broja u sebi... 42 i 88."; promjenljivi broj = /\b(\d+)\b/g; var utakmica; while (match = number.exec(input)) console.log("Pronađen ", podudaranje, " na ", match.index); // → Pronađeno 3 puta 14 // Pronađeno 42 puta 33 // Pronađeno 88 puta 40 Iskorištava činjenicu da je vrijednost dodjele vrijednost koja se dodjeljuje. Korištenjem match = re.exec(input) kao uvjeta u while petlji, tražimo na početku svake iteracije, pohranjujemo rezultat u varijablu i završavamo petlju kada se pronađu sva podudaranja. Raščlanjivanje INI datotekaZa kraj poglavlja, pogledajmo problem koji koristi regularne izraze. Zamislimo da pišemo program koji automatski prikuplja informacije o našim neprijateljima putem interneta. (Nećemo napisati cijeli program, samo dio koji čita datoteku postavki. Oprostite.) Datoteka izgleda ovako: Searchengine=http://www.google.com/search?q=$1 spitefulness=9.7 ; ispred komentara se stavlja točka-zarez; svaki odjeljak se odnosi na različitog neprijatelja fullname=Larry Doe type=kindergarten bull website=http://www.geocities.com/CapeCanaveral/11451 fullname=Gargamel type=evil wizard outputdir=/home/marijn/enemies/gargamel Točan format datoteke (koji se prilično široko koristi i obično se naziva INI) je sljedeći: Prazni redovi i redovi koji počinju točkom i zarezom se zanemaruju Sve ostalo su netočni podaci. Naš zadatak je pretvoriti takav niz u niz objekata, od kojih svaki ima svojstvo naziva i niz postavki. Jedan objekt je potreban za svaki odjeljak, a drugi je potreban za globalne postavke na vrhu datoteke. Budući da datoteku treba raščlaniti redak po redak, dobra je ideja započeti rastavljanjem datoteke u retke. Da bismo to učinili, koristili smo string.split("\n") u 6. poglavlju. Neki operativni sustavi ne koriste jedan \n znak za prijelom retka, već dva - \r\n. Budući da metoda split uzima regularne izraze kao argument, možemo podijeliti retke pomoću izraza /\r?\n/, dopuštajući i pojedinačne \n i \r\n između redaka. Funkcija parseINI(string) ( // Počnimo s objektom koji sadrži postavke najviše razine var currentSection = (name: null, fields: ); var category = ; string.split(/\r?\n/).forEach(function (linija ) ( var match; if (/^\s*(;.*)?$/.test(line)) ( return; ) else if (match = line.match(/^\[(.*)\ ]$ /)) ( currentSection = (name: match, fields: ); category.push(currentSection); ) else if (match = line.match(/^(\w+)=(.*)$/)) ( currentSection. fields.push((name: match, value: match)); ) else ( throw new Error("Redak "" + line + "" sadrži nevažeće podatke."); ) )); vrati kategorije; ) Kod prolazi kroz sve retke, ažurirajući objekt trenutnog odjeljka "trenutni odjeljak". Prvo provjerava može li se linija zanemariti pomoću regularnog izraza /^\s*(;.*)?$/. Možete li zamisliti kako ovo funkcionira? Dio između zagrada odgovara komentarima, ha? čini tako da će obični znak također odgovarati retcima koji se sastoje samo od razmaka. Ako redak nije komentar, kod provjerava počinje li novi odjeljak. Ako da, stvara se novi objekt za trenutni odjeljak kojemu se dodaju naknadne postavke. Posljednja smislena mogućnost je da je niz normalna postavka, u kojem slučaju se dodaje trenutnom objektu. Ako nijedna od opcija ne radi, funkcija daje pogrešku. Primijetite kako česta upotreba ^ i $ osigurava da izraz odgovara cijelom nizu, a ne samo njegovom dijelu. Ako ih ne koristite, kôd će uglavnom raditi, ali će ponekad proizvesti čudne rezultate i pogrešku će biti teško pronaći. Konstrukcija if (match = string.match(...)) slična je triku korištenja dodjele kao uvjeta u while petlji. Često ne znate hoće li poziv podudaranja uspjeti, tako da objektu rezultata možete pristupiti samo unutar if bloka koji ga provjerava. Kako ne bismo prekinuli prekrasan lanac if provjera, dodjeljujemo rezultat pretraživanja varijabli i tu dodjelu odmah koristimo kao provjeru. Međunarodni simboliZbog početne jednostavne implementacije jezika i naknadne fiksacije takve implementacije "u granitu", JavaScript regularni izrazi su glupi sa znakovima koji se ne nalaze u engleskom jeziku. Na primjer, znak "slovo", sa stajališta JavaScript regularnih izraza, može biti jedno od 26 slova engleske abecede, a iz nekog razloga također i podvlaka. Slova poput é ili β, koja su očito slova, ne odgovaraju \w (a odgovarat će \W, što nije slovo).U čudnom obratu, povijesno \s (razmak) odgovara svim znakovima koji se smatraju razmakom u Unicodeu, uključujući stvari poput neprekinutog razmaka ili mongolskog razdjelnika samoglasnika. Neke implementacije regularnih izraza u drugim jezicima imaju posebnu sintaksu za traženje posebnih kategorija Unicode znakova, kao što su "sva velika slova", "svi interpunkcijski znakovi" ili "kontrolni znakovi". Postoje planovi za dodavanje takvih kategorija u JavaScript, ali vjerojatno se neće uskoro implementirati. PoantaRegulari su objekti koji predstavljaju obrasce pretraživanja u nizovima. Oni koriste vlastitu sintaksu da izraze te obrasce. /abc/ Slijed znakova Regularni izraz ima test metodu za provjeru postoji li uzorak u nizu. Postoji exec metoda koja vraća niz koji sadrži sve pronađene grupe. Niz ima svojstvo indeksa koje sadrži broj znaka iz kojeg je došlo do podudaranja. Nizovi imaju metodu podudaranja za podudaranje uzoraka i metodu pretraživanja koja vraća samo početnu poziciju pojavljivanja. Metoda replace može zamijeniti pojavljivanja uzorka drugim nizom. Osim toga, možete proslijediti funkciju za zamjenu koja će izgraditi zamjenski redak na temelju predloška i pronađenih grupa. Uobičajeni znakovi imaju postavke koje se pišu nakon završne kose crte. Opcija i čini regularni izraz neosjetljivim na velika i mala slova, a opcija g ga čini globalnim, što, između ostalog, uzrokuje da metoda replace zamijeni sve pronađene pojave, a ne samo prvu. RegExp konstruktor može se koristiti za stvaranje regularnih izraza iz nizova. Regulatori su oštar instrument s neudobnom ručkom. Oni uvelike pojednostavljuju neke zadatke, a mogu postati neupravljivi pri rješavanju drugih, složenih problema. Dio učenja korištenja regularnih izraza je sposobnost odoljeti iskušenju da ih natrpate zadatkom za koji nisu namijenjeni. VježbeNeizbježno ćete se pri rješavanju problema susresti s nerazumljivim slučajevima, a ponekad možete i očajavati kada vidite nepredvidivo ponašanje nekih regularnih izraza. Ponekad pomaže proučavanje ponašanja običnog motora putem internetske usluge kao što je debuggex.com, gdje možete vidjeti njegovu vizualizaciju i usporediti je sa željenim učinkom.Obični golf“Golf” u kodu je igra u kojoj trebate izraziti zadani program u minimalnom broju znakova. Regularni golf praktična je vježba pisanja najmanjih mogućih regularnih igrača kako bi se pronašao zadani obrazac, i samo to.Za svaki od podredova napišite regularni izraz da biste provjerili njihovu lokaciju u retku. Uobičajeni motor trebao bi pronaći samo ove navedene podnizove. Ne brinite o granicama riječi osim ako nije izričito navedeno. Kada imate pravilan uzorak, pokušajte ga smanjiti. Auto i mačka // Unesite svoje regularne izraze verify(/.../, ["my car", "bad cats"], ["camper", "high art"]); provjeri(/.../, ["pop kultura", "mad props"], ["plop"]); provjeri(/.../, ["ferret", "trajekt", "ferrari"], ["ferrum", "transfer A"]); verify(/.../, ["kako ukusno", "prostrana soba"], ["ruševno", "svijest"]); verify(/.../, ["loša interpunkcija ."], ["izbjeći točku"]); potvrdi(/.../, ["hottenottententen"], ["ne", "hotten totten tenten"]); verify(/.../, ["crveni kljunar", "lelujavo gnijezdo"], ["zemljani krevet", "majmun koji uči"]); funkcija verify(regexp, yes, no) ( // Ignoriraj nedovršene vježbe if (regexp.source == "...") return; yes.forEach(function(s) ( if (!regexp.test(s)) console .log("Nije pronađeno "" + s + """); )); no.forEach(function(s) ( if (regexp.test(s)) console.log("Neočekivana pojava "" + s + ""); )); ) Citati u tekstuRecimo da ste napisali priču i koristili jednostruke navodnike kako biste naznačili dijalog. Sada želite zamijeniti navodnike dijaloga dvostrukim navodnicima, a jednostruke navodnike ostaviti u kraticama za riječi kao što su ne.Smislite obrazac koji razlikuje ove dvije upotrebe navodnika i napišite poziv zamjenu metode koja vrši zamjenu. Opet brojeviNizovi brojeva mogu se pronaći jednostavnim regularnim izrazom /\d+/.Napišite izraz koji pronalazi samo brojeve napisane JavaScript stilom. Mora podržavati mogući minus ili plus ispred broja, decimalnu točku i znanstveni zapis 5e-3 ili 1E10 - opet s mogućim plusom ili minusom. Također imajte na umu da ne mora nužno biti brojeva prije ili iza točke, ali se broj ne može sastojati od jedne točke. To jest, .5 ili 5. su valjani brojevi, ali jedna točka sama po sebi nije. // Ovdje unesite pravilan niz. promjenljivi broj = /^...$/; // Testovi: ["1", "-1", "+15", "1.55", ".5", "5.", "1.3e2", "1E-4", "1e+12"] .forEach(function(s) ( if (!number.test(s)) console.log("Nisam pronašao "" + s + """); )); ["1a", "+-1", "1.2.3", "1+1", "1e4.5", ".5.", "1f5", "."].zaSvaku(funkciju(e) ( if (number.test(s)) console.log("Neispravno prihvaćeno "" + s + """); )); Ovaj članak pokriva osnove korištenja regularnog izraza u Javascriptu. UvodŠto je regularni izraz?JS regularni izraz je niz znakova koji tvori pravilo pretraživanja. Ovo se pravilo zatim može koristiti za pretraživanje teksta, kao i za njegovu zamjenu. U praksi se regularni izraz može čak sastojati od jednog znaka, ali složeniji uzorci pretraživanja su češći. U Javascriptu, regularni izrazi također su objekti. To su obrasci koji se koriste za podudaranje nizova znakova u nizovima. Koriste se u metodama exec() i test() objekta RegExp, te u metodama match(), replace(), search i split() objekta String. Primjer var pattern = /example/i /example/i je regularni izraz. primjer je predložak ( koji će se koristiti u pretrazi). i je modifikator koji pokazuje osjetljivost na velika i mala slova. Priprema regularnog izrazaJS regularni izrazi sastoje se od uzorka i modifikatora. Sintaksa će biti otprilike ovakva: /uzorak/modifikatori; Predložak navodi pravilo pretraživanja. Sastoji se od jednostavnih znakova poput /abc/ ili kombinacije jednostavnih i posebnih znakova: /abc/ ili /Chapter (d+).d/ . Tablica predloškaModifikatori vam omogućuju da upiti budu osjetljivi na velika i mala slova, globalni i tako dalje. Koriste se za provođenje pretraživanja osjetljivih na velika i mala slova, kao i za globalna pretraživanja. Tablica modifikatoraSada smo spremni primijeniti JS regularne izraze. Postoje dva glavna načina za to: korištenje regularnog izraza objekta ili regularnog izraza na nizu. Korištenje objekta regularnog izrazaStvorite objekt regularnog izrazaOvaj objekt opisuje uzorak znakova. Koristi se za usklađivanje uzoraka. Postoje dva načina za konstruiranje objekta regularnog izraza. Metoda 1: Upotreba literala regularnog izraza koji se sastoji od uzorka omeđenog kosim crtama, na primjer: var reg = /ab+c/; Literali regularnog izraza pokreću predkompilaciju regularnog izraza kada se skripta analizira. Ako je regularni izraz konstantan, upotrijebite ga za poboljšanje izvedbe. Metoda 2: Pozivanje funkcije konstruktora objekta RegExp, na primjer: var reg = new RegExp("ab+c"); Korištenje konstruktora omogućuje kompajliranje regularnog izraza JS dok se skripta izvodi. Koristite ovu metodu ako će se regularni izraz promijeniti ili ako ne znate uzorak unaprijed. Na primjer, ako primite informacije od korisnika koji unese upit za pretraživanje. Objektne metode regularnog izrazaPogledajmo nekoliko uobičajenih metoda objekta regularnih izraza:
PrimjeriKorištenje test()Metoda test() regularni je izraz RegExp objekta. Traži uzorak niza i vraća true ili false ovisno o rezultatu. Sljedeći primjer JS regularnog izraza pokazuje kako se niz traži za znak " e”: var patt = /e/; patt.test("Najbolje stvari na svijetu su besplatne!"); Budući da ovdje u retku postoji " e“, rezultat ovog koda bit će istinit. Regularni izrazi ne moraju biti smješteni u varijablu. Isti upit može se napraviti u jednom redu: /e/.test("Najbolje stvari na svijetu su besplatne!"); Korištenje exec()Pretražuje niz koristeći zadano pravilo pretraživanja i vraća pronađeni tekst. Ako nisu pronađeni rezultati, rezultat će biti nula. Pogledajmo metodu na djelu, koristeći primjer istog simbola “ e”: /e/.exec("Najbolje stvari na svijetu su besplatne!"); Budući da linija sadrži " e”, rezultat ovog koda će biti .e . Primjena regularnog izraza na stringU Javascriptu se ovi izrazi također mogu koristiti s dvije metode objekta String: search() i replace(). Oni su potrebni za traženje i zamjenu u tekstu.
PrimjeriKorištenje JS regularnog izraza za izvođenje pretraživanja osjetljivog na velika i mala slova za izraz " w3skole" u redu: var str = "Posjetite W3Schools"; var n = str.search(/w3schools/i); Rezultat u n će biti 6. Metoda pretraživanja također uzima niz kao argument. Argument niza bit će pretvoren u regularni izraz: Korištenje niza za traženje izraza " W3schools" u redu. Regularni izrazi omogućuju vam fleksibilno pretraživanje riječi i izraza u tekstovima kako biste ih izbrisali, izdvojili ili zamijenili. Sintaksa: //Prva opcija za stvaranje regularnog izraza var regexp=new RegExp( uzorak,modifikatori); //Druga opcija za stvaranje regularnog izraza var regexp=/ uzorak/modifikatori; uzorak omogućuje vam da odredite uzorak znakova za pretraživanje. modifikatori omogućuju vam da prilagodite ponašanje pretraživanja:
Tražite riječi i izrazeNajjednostavnija upotreba regularnih izraza je traženje riječi i izraza u različitim tekstovima. Evo primjera korištenja pretraživanja pomoću modifikatora: //Postavi regularni izraz rv1 rv1=/Rusija/; //Navedite regularni izraz rv2 rv2=/Rusija/g; //Navedite regularni izraz rv3 rv3=/Rusija/ig; //Podebljano označava gdje će se naći podudaranja u tekstu kada se koristi //izraz rv1: Rusija je najveća država na svijetu. Rusija graniči sa 18 zemalja. RUSIJA je država nasljednica SSSR-a. //Podebljano označava gdje će se naći podudaranja u tekstu kada se koristi //izraz rv2: Rusija je najveća država na svijetu. Rusija graniči sa 18 zemalja. RUSIJA je država nasljednica SSSR-a."; //Podebljani font označava gdje će se naći podudaranja u tekstu kada se koristi //izraz rv3: Rusija je najveća država na svijetu. Rusija graniči s 18 zemalja. RUSIJA je država nasljednica SSSR-a."; Posebni simboliUz regularne znakove, mogu se koristiti i obrasci regularnih izraza Posebni simboli(metaznakovi). Posebni znakovi s opisima prikazani su u donjoj tablici:
/* Izraz reg1 će pronaći sve riječi koje počinju s dva proizvoljna slova i završavaju s "vet". Budući da su riječi u rečenici odvojene razmakom, dodat ćemo poseban znak \s na početku i na kraju */ reg1=/\s..vet\s/g; txt="zdravo covenant samt ormar"; document.write(txt.match(reg1) + " Brzi pogled Simboli u uglatim zagradamaKorištenje uglatih zagrada [ključ] Možete odrediti grupu znakova za pretraživanje. Znak ^ ispred grupe znakova u uglatim zagradama [^kwg] označava da morate tražiti sve znakove abecede osim navedenih. Korištenje crtice (-) između znakova u uglatim zagradama [a-z] Možete odrediti raspon znakova za pretraživanje. Također možete tražiti brojeve pomoću uglatih zagrada. //Postavi regularni izraz reg1 reg1=/\sko[tdm]\s/g; //Postavi tekstualni niz txt1 txt1=" cat braid code komoda com tepih "; //Koristeći regularni izraz reg1, potražite niz txt1 document.write(txt1.match(reg1) + " Brzi pogled KvantifikatoriKvantifikator- ovo je konstrukcija koja vam omogućuje da odredite koliko puta se prethodni znak ili grupa znakova trebaju pojaviti u podudaranju. Sintaksa: //Prethodni znak mora se pojaviti x - puta (x)//Prethodni znak mora se pojaviti od x do y uključivo puta (x,y)//Prethodni znak mora se pojaviti najmanje x puta (x,)//Određuje da se prethodni znak mora pojaviti 0 ili više puta * //Određuje da se prethodni znak mora pojaviti 1 ili više puta + //Određuje da se prethodni znak mora pojaviti 0 ili 1 put ? //Navedite regularni izraz rv1 rv1=/ko(5)shka/g //Navedite regularni izraz rv2 rv2=/ko(3,)shka/g //Navedite regularni izraz rv3 rv3=/ko+shka/g //Navedite regularni izraz rv4 rv4=/ko?shka/g //Postavite regularni izraz rv5 rv5=/ko*shka/g //Podebljani font pokazuje gdje će se u tekstu pronaći podudaranja kada se koristi //izraz rv1: kshka cat kooshka koooshka kooooshka kooooshka kooooooshka kooooooshka //Podebljano označava gdje će se u tekstu pronaći podudaranja kada se koristi //rv2 izraz: kshka cat kooshka kooooška kooooška kooooooška kooooooška kooooooška//Podebljano označava gdje će se u tekstu pronaći podudaranja kada se koristi //izraz rv3: kshka mačka kooška kooooška kooooška kooooška kooooooška kooooooška//Podebljano označava gdje će se u tekstu naći podudaranja kada se koristi //rv4 izraz: kshka cat kooshka koooshka kooooshka koooooshka koooooshka kooooooshka //Podebljano označava gdje će se u tekstu pronaći podudaranja kada se koristi //rv5 izraz: kshka cat kooshka kooooshka kooooshka kooooshka kooooooshka kooooooshka Bilješka: ako želite koristiti bilo koji poseban znak (kao što je . * + ? ili ()) kao uobičajeni znak, morate staviti \ ispred njega. Korištenje zagradaStavljanjem dijela uzorka regularnog izraza u zagrade, govorite izrazu da zapamti podudaranje koje je pronašao taj dio uzorka. Spremljeno podudaranje možete koristiti kasnije u svom kodu. Na primjer, regularni izraz /(Dmitry)\sVasiliev/ će pronaći niz "Dmitry Vasiliev" i zapamtiti podniz "Dmitry". U donjem primjeru koristimo metodu replace() za promjenu redoslijeda riječi u tekstu. Koristimo $1 i $2 za pristup pohranjenim podudaranjima. Var regexp = /(Dmitry)\s(Vasiliev)/; var text = "Dmitrij Vasiljev"; var newtext = text.replace(regexp, "$2 $1"); document.write(novitekst); Brzi pogled Zagrade se mogu koristiti za grupiranje znakova prije kvantifikatora. |
Čitati: |
---|
Novi
- Geografski informacijski sustav Vrste podataka koji se koriste u GIS-u
- replace() metoda s regularnim izrazom
- Prezentacija na temu John von Neumann John von Neumann preuzmi prezentaciju
- Upute “kako se prijaviti na portal međunarodne olimpijade “Globe” prema prometnim pravilima Službenik globus olimpijade za predškolce
- Predložak rasporeda lekcija za popunjavanje na računalu
- Kako odviknuti dijete od tableta?
- Struktura jednostavnog i složenog virusa
- Koncepti JAVA objektnog programiranja
- Što je informacijski rat
- Kako saznati je li ime domene dostupno