Haha, fangen wir mit ein paar Worten an. Letztes Jahr habe ich ein Syntax-Hervorhebungstool erstellt. Es hat den angegebenen Code basierend auf den Informationen in der Konfigurationsdatei in HTML formatiert, sodass er auf der Webseite dieselbe Syntax anzeigen kann im Editor. Elementhervorhebungseffekt und Unterstützung für Code-Faltung. Das stimmt, es ähnelt dem, was Sie auf dem Blog gesehen haben. Da ich damals MSN Space nutzte, bot es diese Funktion nicht an, sodass ich selbst eine schreiben musste.
Zum Schreiben habe ich zunächst sehr umständliche Grundanweisungen wie „for“, „while“, „if“ usw. verwendet, um Schlüsselwörter usw. zu beurteilen. Lach mich nicht aus, ich wusste nicht, was a Damals gab es einen regulären Ausdruck, daher kann ich diese Methode natürlich immer noch verwenden. Es handelt sich nur um einen langen Code, der meiner Meinung nach sehr schwierig sein wird Andere Software kann nicht so geschrieben werden, also ... Nachdem ich eine Weile bei Google gesucht hatte, fand ich einige Code- und Open-Source-Projekte mit Syntaxhervorhebung und begann, einen Blick darauf zu werfen. . . . . Wow, das ist alles so kompliziert. Ich schaue mir am liebsten den Code anderer Leute an, aber es ist wirklich verwirrend, sich den Code anderer Leute anzuschauen Eine sehr detaillierte Beschreibung des Dokuments, sonst werde ich es mir nicht auf den ersten Blick ansehen. Ich schaue mir höchstens an, wie andere Leute die Schnittstelle schreiben, und rate dann, wie sie intern implementiert ist.
Obwohl die Suche nicht sehr hilfreich war, wurde ich trotzdem über reguläre Ausdrücke informiert. Ich habe vergessen, wo ich sie gesehen habe. Zu dieser Zeit begann ich, reguläre Ausdrücke zu studieren und gleichzeitig meine „kaputten Sachen“ zu verbessern. Nicht lange danach begann ich wieder im Blog Park zu bloggen und aktivierte schließlich die Syntax-Hervorhebungsfunktion von Blog Park. Damit verlor ich die große Motivation, meinen eigenen Code zum Hervorheben von HTML zu schreiben. Zweitens kann das in C# erstellte Syntaxhervorhebungsmodul nur auf der Serverseite oder im WinForm-Programm ausgeführt werden, und was ich letztendlich erhalten möchte, ist HTML-Code, der auf der Seite angezeigt wird. Ich denke, dass clientseitige Skripte für diesen Job am besten geeignet sind. Schade, dass ich nicht viel über JS weiß. . . Später begann ich in dieser Zeit mit anderen Dingen herumzuspielen und verbesserte das Syntaxhervorhebungsmodul nicht.
Ich habe letzte Nacht Überstunden gemacht und wollte ursprünglich UML weiter lernen und mir die Muster ansehen. Dann fiel mir ein, dass das Unternehmen ein Modul hatte, das alle HTML-Tags in den von der Datenbank zurückgegebenen Ergebnissen entfernen musste Ausdruckstool RegexBuddy. Als Ergebnis sah ich im Hilfedokument von RegexBuddy ein einfaches Tutorial zur Verwendung regulärer Ausdrücke in JScript, sodass meine Neugier erneut geweckt wurde, also öffnete ich UltraEdit-32 und begann, einfaches JavaScript zu schreiben, um zu experimentieren.
Ich werde hier nicht auf die Details meines Testprozesses eingehen, da an vielen Stellen wiederholte Tests und viele Umwege erforderlich sind. Hier werde ich direkt die Verwendung regulärer Ausdrücke in JScript angeben, die ich aus dem Test zusammengefasst habe.
Genug mit dem Unsinn, kommen wir zur Sache!
Der Premierminister spricht über das reguläre Ausdrucksobjekt RegExp von JScript.
Der Klassenname, der reguläre Ausdrucksoperationen in JScript bereitstellt, ist RegExp, und Objekte vom Typ RegExp können auf zwei Arten instanziiert werden.
Methode 1, Konstruktor-Instanziierung:
var myRegex = new RegExp(" \w +", "igm ");
//w+ ist der eigentliche reguläre Ausdruck. Das erste bedeutet das Ignorieren der Groß-/Kleinschreibung, der globalen Suche und der mehrzeiligen Suche.
Methode zwei, direkte Zuweisungsmethode:
var myRegex = /w+/igm;
// Der Effekt ist derselbe wie bei der vorherigen Anweisung, außer dass hier keine Übertragungszeichen verwendet werden müssen. Der ursprüngliche reguläre Ausdruck sieht so aus, als ob er den gleichen Effekt hat wie das igm im vorherigen Beispiel.
Welche Methode speziell verwendet wird, hängt von den Vorlieben jedes Einzelnen ab. Ich persönlich denke, dass die zweite Methode beim Schreiben von Regex einfacher zu lesen ist. Die zweite Methode wird ebenfalls empfohlen. Das RegExp-Objekt enthält die folgenden Operationen:
exec(string str): Führt einen regulären Ausdrucksabgleich durch und gibt die Übereinstimmungsergebnisse zurück. Gemäß den von MSDN angegebenen Beispielausführungsergebnissen beginnt jede Ausführung von exec am Ende der letzten direkten Übereinstimmung Der zurückgegebene Wert scheint ein RerExp-Objekt zu sein, und die Erklärung von RegexBuddy besteht darin, ein Array zurückzugeben, aber ich denke, dass es aufgrund der experimentellen Ergebnisse zuverlässiger ist.
Kompilieren (String-Regex, String-Flags): Kompilieren Sie reguläre Ausdrücke vor, damit sie schneller ausgeführt werden. Nach dem Testen wird die Effizienz nach der Vorkompilierung erheblich verbessert. Der Regex-Parameter ist ein regulärer Ausdruck und Flags können eine Kombination der folgenden drei Werte sein: g – globale Suche. Mein Testergebnis ist, dass ohne Hinzufügen des g-Flags nur die erste qualifizierte Zeichenfolge i gefunden werden kann – wobei der Fall m ignoriert wird – Die mehrzeilige Suche scheint standardmäßig eine mehrzeilige Suche zu sein:
test(string str): Wenn str mit dem regulären Ausdruck übereinstimmt, gibt er true zurück, andernfalls gibt er false zurück. Diese Übereinstimmungsmethode ähnelt dem String-Objekt
RegExp-Objekt und enthält die folgenden Attribute :
index: in der Zeichenfolge Die Position des ersten übereinstimmenden Ausdrucks, zunächst -1
Eingabe: Das passende Ziel des regulären Ausdrucks. Beachten Sie, dass es schreibgeschützt ist
lastIndex: Die Position des nächsten übereinstimmenden Ausdrucks ist (Gibt die Zeichenposition zurück, an der die nächste Übereinstimmung in einer gesuchten Zeichenfolge beginnt.) Ich weiß nicht, ob ein Übersetzungsfehler vorliegt. Ich habe dieses Attribut nicht verwendet.
lastMatch: die letzte Zeichenfolge, die mit dem Ausdruck übereinstimmt
lastParen: Die letzte übereinstimmende Teilübereinstimmungszeichenfolge. Wenn es beispielsweise in einem regulären Ausdruck mehrere Übereinstimmungen gibt, die nach () gruppiert sind, stellt lastParen die letzte Gruppe übereinstimmender Ergebnisse dar.
leftContext: Alle Zeichen vom Anfang der Zielzeichenfolge bis zur Startposition der letzten Übereinstimmung.
rightContext: Alle Zeichen vom Ende der letzten Übereinstimmung bis zum Ende der gesamten Zielzeichenfolge.
mehrere
()-Gruppen enthält.
Lassen Sie uns als Nächstes über die Operationen sprechen, die sich auf das String-Objekt und reguläre Ausdrücke in JScript beziehen
(String-Regex): Akzeptiert einen regulären Ausdruck und gibt zurück, ob die Zeichenfolge mit dem Ausdruck übereinstimmt.
replace(srting regex, string str): Ersetzen Sie den Teilstring, der dem regulären Ausdruck entspricht, durch str. Diese Funktion scheint einfach zu sein, verbirgt jedoch auch eine komplexere Verwendung. Bitte sehen Sie sich das folgende Beispiel an.
Beispiel 1:
var str1 = "A:Mein Name ist Peter!nB:Hallo Peter!";
str1 = str1.replace(/Peter/g,"Jack");
alarm(str1);
Dieses Beispiel ist so einfach wie das Ersetzen einer Zeichenfolge. Die Leistungsfähigkeit dieses Ausdrucks ist natürlich nicht darauf beschränkt. Wenn Sie damit vertraut sind, können Sie damit auch viele Aufgaben erledigen, für die zuvor viel Code erforderlich war. Fügen Sie beispielsweise hervorgehobene HTML-Tags vor und nach Code-Schlüsselwörtern hinzu. Aus dem vorherigen Beispiel geht hervor, dass Ersetzen nur passenden Text durch neuen Text ersetzen kann. Wie kann ich damit Tags vor und nach Schlüsselwörtern einfügen? Wenn Sie beim Ersetzen die passenden Ergebnisse verwenden können, ist es einfacher, die Schlüsselwörter durch Folgendes zu ersetzen: Tag-Header + Schlüsselwort + Tag-Ende.
Aber wie nutzt man die Ergebnisse des regulären Ausdrucksabgleichs beim Ersetzen?
Zu diesem Zeitpunkt müssen wir „Matching-Variablen“ verwenden, um die Ergebnisse des regulären Matchings darzustellen. Das Folgende ist eine Beschreibung der Matching-Variablen:
$& – stellt die übereinstimmenden Ergebnisse aller übereinstimmenden Gruppen dar. Schließlich ist die übereinstimmende Gruppe die ()-Gruppe des regulären Ausdrucks.
$$ – stellt das $-Zeichen dar. Da die passende Variable das $-Zeichen verwendet, muss es maskiert werden.
$n – ähnelt dem vorherigen $1...$9 und gibt den n-ten Satz übereinstimmender Ergebnisse an
$nn – ganz einfach das Ergebnis der neunten Gruppe von Spielen
$` – ist der zuvor erwähnte leftContext. Wenn beispielsweise abcdefg mit d übereinstimmt, ist abc sein leftContext.
$' – Es kommt dem oben Gesagten sehr nahe, verstehen Sie es nicht falsch! , das ist der rightContext. Analog dazu ist efg der rightContext des obigen Beispiels. Jetzt ist es für uns sehr einfach, Tags vor und nach den Schlüsselwörtern einzufügen:
var str1 = "A:Mein Name ist Peter!nB:Hallo Peter!" ;
str1 = str1.replace(/Peter/g, "<b>$&</b>");
alarm(str1);
Es ist bereits 0:39. . . Lassen Sie uns hier aufhören.
Regulärer Tool-Software-Download (Passwort: Regex): Regex Buddy 2.06.zip
Bitte sehen Sie sich das Beispiel an, das ich geschrieben habe: JScript-Syntaxhervorhebung (Codeoptimierung)
Hier sind einige Beispiele von MSDN:
function matchDemo()
{
Vars;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 enthält: " + RegExp.$1 + "n";
s += "$2 enthält: " + RegExp.$2 + "n";
s += "$3 enthält: " + RegExp.$3;
Rückkehr(en);
}
Funktion RegExpTest()
{
var ver = Number(ScriptEngineMajorVersion() + „.“ + ScriptEngineMinorVersion())
if (ver >= 5.5){
var src = „Der Regen in Spanien fällt hauptsächlich in der Ebene.“;
var re = /w+/g;
var arr;
while ((arr = re.exec(src)) != null)
print(arr.index + „-“ + arr.lastIndex + „t“ + arr);
}
anders{
Alert("Sie benötigen eine neuere Version von JScript, damit dies funktioniert");
}
}
Funktion matchDemo()
{
var s; //Variable deklarieren.
var re = new RegExp("d(b+)(d)","ig"); //Muster für reguläre Ausdrücke.
var str = "cdbBdbsbdbdz"; //Zu durchsuchende Zeichenfolge.
var arr = re.exec(str); //Suche durchführen.
s = "$1 gibt Folgendes zurück: " + RegExp.$1 + "n";
s += "$2 gibt zurück: " + RegExp.$2 + "n";
s += "$3 gibt Folgendes zurück: " + RegExp.$3 + "n";
s += "input returns : " + RegExp.input + "n";
s += "lastMatch gibt Folgendes zurück: " + RegExp.lastMatch + "n";
s += "leftContext gibt zurück: " + RegExp.leftContext + "n";
s += "rightContext gibt zurück: " + RegExp.rightContext + "n";
s += "lastParen gibt zurück: " + RegExp.lastParen + "n";
return(s); //Ergebnisse zurückgeben.
}
document.write(matchDemo());
Wenn vorbeikommende Helden eine Meinung zu diesem Artikel haben, können Sie sie gerne hier posten. Lassen Sie uns gemeinsam lernen und Fortschritte machen.