taus gruppe ikke fungerer i javascript regex kamp ()

stemmer
1

I prøver for å utvinne (potensielt bindestrek) ord fra en streng som er blitt merket med en '@'.

Så for eksempel fra strengen

var s = '@moo, @baa and @moo-baa are writing an email to a@bc.de'

Jeg ønsker å komme tilbake

['@moo', '@baa', '@moo-baa']

For å sørge for at jeg ikke fange e-postadresse, sjekker jeg at gruppen kommer etter en hvit-mellomrom eller begynnelsen av linjen:

s.match(/(^|\s)@(\w+[-\w+]*)/g)

Dette ser ut til å gjøre triks, men det fanger også mellomrom, som jeg ikke ønsker:

[@moo,  @baa,  @moo-baa]

Stanse den gruppering som dette

s.match(/(?:^|\s)@(\w+[-\w+]*)/g)

ser ikke ut til å fungere, det returnerer samme resultat som før. Jeg har også prøvd det motsatte, og sjekket at det er ingen \ w eller \ S i front av gruppa, men som også utelukker begynnelsen av linjen. Jeg vet jeg kunne bare trimme områder av, men jeg vil veldig gjerne få dette å jobbe med bare en enkelt 'kamp' samtale.

Noen som har et forslag på hva jeg gjør galt? Tusen takk på forhånd !!

[redigere]

Jeg har også nettopp lagt merke til: Hvorfor er det retur '@' symboler i tillegg ?! Jeg mener, det er hva jeg vil, men hvorfor er det å gjøre det? De er utenfor gruppen, er de ikke?

Publisert på 17/07/2012 klokken 16:22
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Hvis du ikke ønsker å ta plass, ikke sette \sinnsiden av parenteser. Noe inne i parentesene vil bli returnert som en del av registreringsgruppe.

Svarte 17/07/2012 kl. 16:28
kilden bruker

stemmer
2

Så vidt jeg vet, er hele kampen returnert fra String.matchnår du bruker "g" modifier. Fordi, med det modifiserende middel er du forteller funksjonen for å passe inn hele uttrykket stedet for å opprette nummererte fyrstikker fra underuttrykk (grupper). En global kamp returnerer ikke grupper, i stedet gruppene er de kampene selv.

I ditt tilfelle, kan det regulære uttrykket du leter etter er dette:

'@moo, @baa and @moo-baa are writing an email to a@bc.de'.match(/(?!\b)(@[\w\-]+)/g);

Du leter etter hver "@" symbol som ikke følger en ordgrense. Så det er ikke behov for stille grupper.

Svarte 17/07/2012 kl. 21:01
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more