2010-08-04 8 views
7

gegeben:Javascript - erhalten nur der variable Teil einer Regex

var regexp = new RegExp("<~~include(.*?)~~>", "g"); 

Was ist der einfachste Weg in Javascript eine Variable zuweisen, was auch immer von Matched *.?

ich dies tun kann, aber es ist ein wenig hässlich:

myString.match(regexp).replace("<~~include", "").replace("~~>", ""); 

Antwort

6

Javascript sh Ein Array-Objekt sollte bei einer Regex-Übereinstimmung zurückgegeben werden, wobei der Null-Index des Arrays der gesamte String ist, der abgeglichen wurde, und die folgenden Indizes die Capture-Gruppen sind. In Ihrem Fall so etwas wie:

var myVar = regexp.exec(myString)[1];

sollte den Wert der (.*?) Capture-Gruppe zu myVar zuweisen.

+1

Wird dies nicht zu einem Fehler führen, wenn es keine Übereinstimmung gibt? Wenn keine Übereinstimmung vorhanden ist, wird null zurückgegeben. Wenn Sie also versuchen, auf den Array-Index eines Nullobjekts zuzugreifen, wird ein Fehler ausgegeben. –

6

(Zitate aus MDC)

Einschließlich Klammer in einem regulären Ausdruck die entsprechende submatch bewirkt in Erinnerung zu bleiben. Beispiel: /a(b)c/ entspricht den Zeichen 'abc' und merkt sich 'b'.

Seit .*? ist das erste (und einzige) erinnerte Spiel, verwenden $1 in Ihrer Ersatz string:

var foo = myString.replace(regexp, '$1'); 

Edit: Wie pro Ihren Kommentar, können Sie auch (vielleicht mit klarere Absicht) tun Sie dies:

var foo = regexp.exec(myString)[1]; 
+0

Dank Bären. Das ist, ich möchte das Ganze nicht wirklich ersetzen, ich will nur herausfinden, was der Wert von. * Ist? ist. – morgancodes

+0

[Nick] (http://stackoverflow.com/users/21399/nick) hat gerade kommentiert (und dann seinen Kommentar gelöscht), dass die erste Version auch funktionieren wird. Er ist korrekt, aber ich denke, die Absicht der 'replace' Version ist weniger klar als die Absicht der' exec' Version. In beiden Fällen müssen Sie den von 'replace' /' exec' zurückgegebenen Wert einer anderen Variablen zuweisen. –

0

Sie können Lookahead für einen Teil dieses regulären Ausdrucks verwenden. Siehe hier:

Regular expression for extracting a number

und/oder hier:

http://www.regular-expressions.info/lookaround.html

+0

Lookaround ist nicht die Antwort. Wie soll das helfen? –

+0

[quote] Danke Bären. Das ist, ich möchte das Ganze nicht wirklich ersetzen, ich will nur herausfinden, was der Wert von. * Ist? ist. - morgancodes vor 15 Minuten – Skyler

+0

So könnten sie eine Regex schreiben, die [EDIT] mit <~~ include (. *?) ~~> übereinstimmt und die Informationen ausschließt, die sie nicht wollen. – Skyler