2013-03-14 16 views
8

ho bisogno di trovare una sottostringa circondato da virgolette, ad esempio, come "test", "te\"st" o "", ma non """ né "\". Per raggiungere questo obiettivo, che è il modo migliore per andare per esso nel seguenteJS espressione regolare per trovare una stringa circondato da doppie virgolette

1) /".*"/g 
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g 
3) /"(?:\\?[\S\s])*?"/g 
4) /"([^"\\]*("|\\[\S\s]))+/g 

mi è stato chiesto questa domanda ieri durante l'intervista, e vorrebbe conoscere la risposta per riferimento futuro.

+3

questo suona un po 'come ti chiede * noi * una domanda che qualcuno ha chiesto * voi *, come ad esempio su un test o in un colloquio di lavoro. Se è così, dovresti * dire * così. –

+2

Sì hai ragione. Mi è stato chiesto di questa domanda ieri durante l'intervista e non avevo idea di come rispondere. Ora voglio sapere, quindi mi aiuterà in futuro. – 2619

+0

@ x4ph4r: noto che frequenti le tue domande e lasci buone risposte non rispondenti a (come quella di Gareth in basso). Per favore guarda le tue domande per vedere se qualcuno ha raccolto risposte utili, considera quelle che risolvono il problema che hai avuto e considera di ringraziarle per il loro tempo. – halfer

risposta

2

Queste espressioni valutare come segue:

Espressione 1 partite:

  • Un Apici
  • Avidamente qualsiasi carattere, tra cui una virgola invertita o una barra
  • Un'ultima virgola invertita.

Questo corrisponderebbe "test" some wrong text "text", e non riesce quindi

Expression 2 incontri:

  • invertito virgola
  • avidamente come molti personaggi che non sono né una virgola invertita o una barra
  • avidamente come molti set di
    • Qualsiasi chracter preceduto da una barra
    • avidamente come molti personaggi che non sono né una virgola invertita o una barra
  • Una virgola finale rovesciato

Quindi questo raccoglie tutti chracters all'interno delle virgolette in serie, rotto da barre. Esclude specificatamente una virgola invertita se è preceduta da una barra includendola in qualsiasi serie successiva. Questo funzionerà.

Expression 3 partite:

  • Un Apici
  • quanto alcuni gruppi come forma di:
    • qualsiasi carattere preceduto da una barra facoltativa
  • Un finale invertito virgola

Raccoglie tutti i caratteri, opzionalmente preceduti da una barra, ma non avidamente.Ciò funzionerà

Expression 4 incontri:

  • invertito virgola
  • avidamente tutti i caratteri che non sono o una virgola invertita o una barra
  • Uno o più:
    • Una virgola invertita o
    • Una barra e qualsiasi carattere

Ciò corrisponderà "test"\x, e non riesce quindi

Conclusione:

Da quello che posso dire, entrambe le espressioni 2 e 3 funzionerà. Potrei aver perso qualcosa, ma entrambi funzioneranno sicuramente (o non in modo appropriato) per gli esempi forniti. Quindi la domanda, quindi, è quale è meglio. Io voterei per tre, perché è più semplice.

0

La tua grammatica non è chiara. Presumo che tu voglia trovare tutte le stringhe del modulo DQ [tutto tranne DQ o \ DQ] * DQ.

L'espressione regolare per questo /"([^"\\\\]|\\\\"|\\\\[^"])*"/g

Problemi correlati