2016-07-28 3 views
1

Ich versuche, einen Regex-Ausdruck in JavaScript zu schreiben, der mit einem beliebigen String übereinstimmt, solange er mit einem Leerzeichen, einem octothorpe (#) und Zeichen beginnt. Ich möchte jedoch, dass dieser Ausdruck hexadezimale Codes ausschließt.Regex-Ausdruck, der #Tags, aber keine Hex-Codes entspricht

Ich habe diesen Ausdruck für die Erfassung #tags:

/([\s]#[^<\s]+)/g 

und ich habe einen Ausdruck, der Hex-Codes im Format (#xxxxxx), dass mein größeres Programm sie werden empfangen erfasst:

/(#[0-9a-fA-F]{6,6}\b)/g 

aber ich weiß nicht, wie man sie zusammensetzt, damit ich mit Übereinstimmungen komme, die durch den ersten Ausdruck beschrieben werden, aber nicht durch den zweiten.

Ich möchte alles in einer einzigen Regex-Anweisung tun. Wenn dies nicht möglich ist, würde ich gerne eine Möglichkeit kennen, alle Nicht-Hex-Strings, die mit # beginnen, mit einer Kombination aus Regex- und JavaScript-Funktionen zu erhalten. Ich benutze jQuery und Backbone.js, wenn das hilft.

Extra Credit:

Was ist der Unterschied zwischen diesen ist:

/(#[0-9a-fA-F]{6,6}\b)/g 

und diese:

/(#[0-9a-fA-F]{6}\b)/g 

Ich habe https://regex101.com benutze meine Ausdrücke zu schreiben und testen und beide scheinen die gleichen Ergebnisse zu liefern.

+0

Können Sie Testeingabe bereitstellen? Was versuchst du zu erreichen? Was versuchst du nicht zu erreichen? Extra-Guthaben: Sie können einen Regex101.com-Permalink erstellen, der anzeigt, was Sie gerade tun. –

+2

Für die Extra Credit: der einzige Unterschied ist: '{6}' ist viel schöner als '{6,6}' –

Antwort

2

Sie können den zweiten regulären Ausdruck als negativen Vorgriff verwenden ((?!) in Ihrem ersten:

(?:\s|^)(#(?![\da-fA-F]{6}\b)[^<\s]+) 

ich bei denen die Möglichkeit starten hinzugefügt, um eine Zeichenfolge sofort mit einem Hash zu starten, ohne die erforderlich Raum.

Siehe Regex tester

NB: {6,6} ist in der Tat genau das gleiche wie die Abkürzung für die: {6}. Wie unter regular-expressions.info angegeben:

Es gibt einen zusätzlichen Quantifizierer, mit dem Sie angeben können, wie oft ein Token wiederholt werden kann.

Die Syntax ist {min, max}, wo min Null oder eine positive ganze Zahl, die die minimale Anzahl von Übereinstimmungen anzeigt, und max eine ganze Zahl gleich oder größer als min angibt, die maximale Anzahl der Übereinstimmungen [...] unterlassen sowohl das Komma und max sagt der Maschine, die Token genau min mal zu wiederholen.

+0

Warum haben Sie das 0-9 Stück aus dem negativen Ausdruck entfernt und wie funktioniert die Lösung Arbeitest du immer noch ohne? – Simon

+2

Weil '\ d' äquivalent ist. – L3viathan

Verwandte Themen