2016-07-27 2 views
0

Ich möchte ein JS-Regex-Muster erstellen, das übereinstimmt, wenn die Zeichenfolge entweder < oder { enthält, aber ich weiß nicht, wie man einen or Bedingungstyp im Muster verwendet. Ich weiß, dass ? werden Sie 0 oder 1 eines Charakters geben, aber ich möchte zumindest von 1 < oder {Wie erstelle ich ein Regex-Muster in JS, das einem String entspricht, wenn es mindestens ein "<" ODER ein "{"?

+0

Die Eingabezeichenfolge für gültiges und ungültiges Ergebnis anzeigen – RomanPerekhrest

+0

In welcher Sprache arbeiten Sie? Das Konzept, das Sie verwenden möchten, ist "Regex Union", aber die Implementierung ist sprachabhängig, so dass wir keine genaue Antwort geben können, ohne dies zu wissen. – Kadima

+0

die Sprache, die ich benutze, ist Javascript und ich habe versucht, etwas wie 'pattern =/[<{] /; var str = " akantoword

Antwort

2

können Sie eckige Klammern verwenden ([]) eine Liste zu erzeugen, von denen die Regex einem passt auf der Zeichen. Daher < oder { Verwendungszweck anzupassen:

[<{] 

Beispiel (Matched Abschnitt fett):

[<{].*[>}]

< Dies wird passen>

{So wird dies}

oder

[<{]

< Nur der erste Halter passt>

{ Nur die erste Klammer entspricht}


Hinweis: Sprache und verwendete Funktionen sind ebenfalls zwingend erforderlich. Stellen Sie sicher, dass Sie wissen, wie die Funktion funktioniert, damit Sie wissen, was Sie davon erwarten können.

Here ist ein Link zu MDN-Dokumentation von Regexp.match, die hilfreich sein könnte. Sehen Sie sich auch ihre Links zu anderen Funktionen und Informationen an.

+0

wird es übereinstimmen, solange es ein ONE Charakter gibt? ist das Standardverhalten auch ohne das '?' – akantoword

+1

@akantoword Es wird * genau * ein Zeichen entsprechen. Es passt nicht (als Teil eines größeren Musters), wenn es nicht das eine oder das andere gibt. Das '?' Würde erlauben, dass es keine Charaktere gibt und immer noch passt. – rtmh

0

Einfache Lösung mit RegExp.test Funktion:

var re = /([<]|[{])/; 

console.log(re.test("test{one<}")); // true 
console.log(re.test("test{"));  // true 
console.log(re.test("test-->"));  // false 

([<]|[{]) - Spiele entweder < oder {.

+0

Wechsel ist keine gute Idee, da sie schlechtere Leistung als Zeichenklassen haben. Doing '[<{]' ist viel effizienter. Übrigens brauchen Sie keine Zeichenklassen für '<' und '{' wenn Sie wollen, dass das Literal '' '' '' '' '' '' den Trick verwendet, obwohl '[<{]' besser ist. –

+0

@FedericoPiazza, das war zur Demonstration für die OPs * ein OR-Typ der Bedingung im Muster *. – RomanPerekhrest

+0

Nicht zu sagen, die Antwort ist falsch, eigentlich ist gut. Ich habe nur kommentiert, um weitere Details zur Verwendung hinzuzufügen, falls OP mit Änderungen fortfahren möchte. Übrigens müssen Sie keine Zeichenklassen verwenden, um den Zeichen mit '<| {' zu entkommen. –

Verwandte Themen