Avatar billede per1291 Nybegynder
29. august 2005 - 18:17 Der er 17 kommentarer og
1 løsning

Hvornår gælder "multiline"

Hej -
jeg sysler stadig med RegExp.

var R=new RegExp("xxx","igm");

som også kan skrives sådan her:

var R=/xxx/igm;

indeholder 3 søgemode-anvisninger, nemlig i og g og m.

Det er let for mig at finde eksempler på, at i og g ("ignorecase" og "global") gør en forskel.

Men jeg har svært ved at finde eksempler hvor m ("multiline") gør en forskel.

Hvordan sørger man for, at en bestemt tekst faktisk strækker sig over flere linjer? Jeg kan i hvert fald ikke få mine indtastninger i et textarea til at gøre det. Der kommer de samme matches hvad enten jeg bruger /ig eller igm

Jeg har forsøgt med <br>, \n og et tryk på entertasten. - Hilsen Per
Avatar billede olebole Juniormester
29. august 2005 - 21:48 #1
<ole>

- er du nu der *igen*?  ;D

Det kan zq også være en lidt tricky én at gennemskue, når man 'ankommer' til RegExp. Du ved formodentlig nu, at '$' matcher slutningen på en linje. Prøv så dette eksempel med og uden en m-modifier:

<script type="text/JavaScript">
s = "blabla 123 bla\nblablablabla blabla 123\nblabla 123";
s = s.replace(/123$/g, "XXX");
alert(s)
</script>

- så skulle forskellen gerne syne lidt mere transparent  ;o)

/mvh
</bole>
Avatar billede per1291 Nybegynder
29. august 2005 - 23:19 #2
Ole -> Jeg ved godt jeg er irriterende. Jeg krummer selv tæer.

Dit eksempel virker. Og det er meget oplysende. Men det virker IKKE, når jeg indtaster s (teksten) i et textarea. Og det skulle det gerne, for jeg arbejder med at lave et lille program til at teste hvordan en RegExp læser en indtastet string.

Egentlig er det ikke et RegExp-problem dette her. Det er mere dét at oversætte indholdet af et textarea til en string, tror jeg. - Hilsen Per

Hm, måske skulle man splitte sit textarea med \n ...
Avatar billede olebole Juniormester
29. august 2005 - 23:34 #3
Nej, for Satan! ... pardon my French ... Det var absolut ment som en joke!  :)

Når man selv kan - og følger dine spørgsmål - er det som at se et kort af et kendt landskab. Et kort over den jungle, jeg for få år siden selv fægtede mig igennem ... iført machette og editor. Det er tværtimod en fornøjelse at forsøge at trække buskene lidt til side for en ihærdig opdagelsesrejsende  ;o)

Prøv dette, som fungerer fint her:

<script type="text/JavaScript">
function doMyRegExp_A() {
    var s = document.getElementById("gnu").value;
    s = s.replace(/123$/g, "XXX");
    alert(s)
}
function doMyRegExp_B() {
    var s = document.getElementById("gnu").value;
    s = s.replace(/123$/gm, "XXX");
    alert(s)
}
</script>

<textarea id="gnu" style="width:500px;height:300px">
blabla 123 bla
blablablabla blabla 123
blabla 123</textarea>

<br>

<button onclick="doMyRegExp_A()">TEST 1</button>
<button onclick="doMyRegExp_B()">TEST 2</button>
Avatar billede per1291 Nybegynder
29. august 2005 - 23:35 #4
Supplerende info:

Mit textarea har id="inputTekst".
I dette textarea indtaster jeg:
blabla 123 bla\nblablablabla blabla 123\nblabla 123

Og så kører jeg dit script:

s=document.getElementById("inputTekst").value;
s = s.replace(/123$/g, "XXX");

Uanset om jeg bruger /g eller /gm sker kun den sidste erstatning. - Hilsen Per
Avatar billede per1291 Nybegynder
29. august 2005 - 23:36 #5
Vore indlæg krydsede - vil nærlæse. - Hilsen Per
Avatar billede olebole Juniormester
29. august 2005 - 23:42 #6
Hehe ... du er bare røget ind i et andet lille problem  :)
Når du skriver '\n' ind i et textarea - mens dokumentet ligger i browseren - står der i value-strengen '\\n'  ;o)

Prøv at taste strengen ind i dette:

<script type="text/JavaScript">
function doMyRegExp() {
    var s = document.getElementById("gnu").value;
    s = s.replace(/\\n/g, "\n")
    s = s.replace(/123$/gm, "XXX");
    alert(s)
}
</script>

<textarea id="gnu" style="width:500px;height:300px"></textarea>
<br>
<button onclick="doMyRegExp()">TEST 1</button>
Avatar billede olebole Juniormester
29. august 2005 - 23:46 #7
- men til det brug ville jeg nok skrive:

function doMyRegExp() {
    var s = document.getElementById("gnu").value;
    s = s.replace(/123\\n|123$/gm, "XXX");
    alert(s)
}
Avatar billede per1291 Nybegynder
29. august 2005 - 23:48 #8
Hold da op: Det virker!
Hvorfor kunne jeg ikke få det til det før? (Altså før jeg stillede spørgsmålet.)
Nå, jeg havde jo heller ikke dit glimrende eksempel ved hånden.

Men jeg har nu aldrig troet at du var irriteret i virkeligheden. (Jeg bruger bare ikke smileys!)

Venligst læg et svar. Mine 30 point er nok i underkanten, men du kan nok hente flere senere. - Hilsen Per
Avatar billede roenving Novice
29. august 2005 - 23:49 #9
Så står der vel \\  n|1 undervejs ?-)
Avatar billede olebole Juniormester
29. august 2005 - 23:49 #10
- umiddelbart ser det ikke ud somom, du behøver m-modifier'en her. Ikke, hvis du indtaster:
    blabla 123 bla\nblablablabla blabla 123\nblabla 123

- men det gør du, hvis du indtaster:
    blabla 123 bla\nblablablabla blabla 123\nblabla 123
    blabla 123 bla\nblablablabla blabla 123\nblabla 123
Avatar billede olebole Juniormester
29. august 2005 - 23:50 #11
Jes >> den fik jeg ikke lige  :)
Avatar billede per1291 Nybegynder
29. august 2005 - 23:57 #12
Jeg har svaret på Oles indlæg af 23:34:22.
Hvad der følger derefter vil jeg studere senere.
Mit spørgsmål er besvaret. - Hilsen Per
Avatar billede olebole Juniormester
30. august 2005 - 00:02 #13
Du får lige et svar, men jeg ville nu gerne lige høre fra Jes. Jeg har en fornemmelse af at have lavet en fejl, jeg er for søvnig til at se  :)
Avatar billede olebole Juniormester
30. august 2005 - 00:07 #14
Tak for points  :)
Avatar billede roenving Novice
30. august 2005 - 00:10 #15
Tjah, eller også var det den celle bag det andet øjenbryn, som gik i selvsving !-)

-- eller-tegnet giver rig mulighed for at lave småfejl, og i en hel del regexps vil man jo klaske dem ind i en gruppe, fordi der både står noget foran og bagved ...

-- og der var lige et tilfælde af sammenbruddet i den anden celle, fordi jeg opfattede det tegn som tegn-baseret !o]
Avatar billede per1291 Nybegynder
30. august 2005 - 00:16 #16
Altså, jeres volapyk!
Men oplysningen om at indtastningen \n bliver til valuen \\n er nyttig.
Tak. - Hilsen Per
Avatar billede olebole Juniormester
30. august 2005 - 00:33 #17
Jes >> har jeg ikke nævnt for dig, du skal passe på med at aktivere begge celler på én og samme gang?  ;D

Per >> bær venligst over med os. En vigtig lære man kan udlede af vores små usikkerheder er, at RegExp hurtig bliver gyngende grund og at det gælder om at holde tungen lige i næsen  ;o)
Man får lynhurtigt udelukket 'venligtsindede' - og budt 'terrorister' indenfor - hvis man ikke er umådelig forsigtig med opstilling af regler og kriterier
Avatar billede roenving Novice
30. august 2005 - 00:38 #18
Næh, det er vist mig, der har nævnt det for dig !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester