Hinweis auf regex101.com für das Experimentieren mit Regulären Ausdrücken .
Regulärere Ausdrücke (engl. regular expression, Abk. RegExp oder Regex) sind ein sind ein mächtiges Mittel, um Zeichenketten zu filtern (denkbaren Zeichenkombinationen zu finden, to match) und komplizierte Textersetzungen durchzuführen.
Reguläre Ausdrücke wurden zu einem unverzichtbaren Bestandteil von zeichenverarbeitenden Sytemen (z.B. textbasierten Editoren, Suchtools, XSLT, usw). Reguläre Ausdrücke können für Transformationen von Zeichenfolgen in modifizierte Zeichenfolgen (z.B.Suchen-und-Ersetzen) verwendet werden.
Werden reguläre Ausdrücke von ECMAScript unterstützt?
JavaScript ab 1.2 unterstützt reguläre Ausdrücke (und verwendet die Syntax wie Perl 5).
Ein regulärer Ausdruck wird als eine Folge von Zeichen zwischen /.../
angegeben
( oder als ein ECMAScript-String ),
der dem Konstruktor RegExp() übergeben wird.
Bei der Regulären Ausdrücken gibt es Zeichen, die besondere Bedeutungen haben und Meta-Character genannt werden.
Die folgenden Meta-Character (RegExpr-Literalzeichen) haben eine besondere Bedeutung:
\ / * + ? | { [ ( ) ^ $ . # white space
? entspricht {0,1} , d.h. ? steht für "irgend ein Zeichen".
* entspricht {0, } , d.h. * steht für "keinem, einem oder mehreren Zeichen".
+ entspricht {1, } , d.h. + steht für "mindestens einem oder mehreren Zeichen".
Einem beliebigen Zeichen außer \n
entspricht .
Einem beliebigen Zeichen entspricht [\s\S]
Es gibt 2 Schreibweisen für reguläre Ausdrücke:
/RegExpLiteral/glob
für feste RegExpr und
new RegExp("RegExpStr",glob)
für dynamische RegExpr.
Soweit möglich wird die Form /RegExpLiteral/glob
bevorzugt.
new RegExp("RegExpStr",glob)
wird z.B. gebraucht,
wenn aus einer Tastatureingabe ein RegExp
erzeugt werden muß.
Es gibt die beiden Schreibweisen:
Beispiel: Für 1. Methode: \r?\n matches a new line
Beispiel: Für 2. Methode: \\r?\\n matches a new line
Muster | Muster | |
---|---|---|
1. | var re = /RegExpLiteral/glob ;
| Muster für regulären Ausdruck können mit /RegExpLiteral/ begrentzt werden.
Beispiel: var re = /\r?\n/g;
|
2. | var re = new RegExp("RegExpStr","glob") ;
| Muster für regulären Ausdruck können mit "..." begrentzt werden.
Beispiel: var re = new RegExp("\\r?\\n", "g");
|
Mögliche Parameter sind:
var re = /RegExpLiteral/glob // fester RegExp var re = new RegExp(RegExpStr,glob) // verwende in RegExpStr "\\" anstelle "\"
glob = "i"; // (ignoreCase, Groß-/Kleinschreibung ignorieren)
glob = "g"; // (global, globale Suche nach allen Treffern)
glob = "gi"; // ( globale Suche, Groß/Klein ignorieren)
glob = "m"; // (multiline, globale Suche nach allen Treffern)
lastIndex // Index, an dem das nächste exec
-Match beginnt
source // Quelltext des regulären Ausdruckes
Bei
var str_neu = str.replace(/find/glob, repl);
kann in repl verwendet werden:
$$ Inserts a "$". $& Inserts the matched substring. $` Inserts the portion of the string that precedes the matched substring. $' Inserts the portion of the string that follows the matched substring. $n Where n is a positive integer less than 100, inserts the nth parenthesized submatch string, provided the first argument was a RegExp object. Note that this is 1-indexed.
Beispiele:
Mit den Variablen
var s = "n91 nr82 nr73 nrNN", r = [];
liefert die Ausgabe
alert( '[' + r.join(", ") + ']') die folgende Anzeige:
s.replace(/nr./g, function(str){r.push(str);}) => [nr8, nr7, nrN] s.replace(/nr[\s\S]/g,function(str){r.push(str);}) => [nr8, nr7, nrN] s.replace(/nr?/g, function(str){r.push(str);}) => [n, nr, nr, nr] s.replace(/nr\d/g, function(str){r.push(str);}) => [nr8, nr7] s.replace(/nr[0-9]/g, function(str){r.push(str);}) => [nr8, nr7]
Beispiele für typische Funktionen sind:
var src = "mein text"; var arr = src.split (SplitRe); var b = /re/.test("str"); // kein g Flag var s1 = src.match ( re, "glob"); var s2 = src.replace( re, "ReplStr"); var s3 = src.replace( re, "$2,$1"); var re = new RegExp ("re", "glob"); var Arr = re.exec(src);
Sollen in einem String z.B. alle Punkte "." gesucht werden, so muß das Suchzeichen maskiert werden mit "\."
\n matches a new line \| matches | \f matches a form feed \{ matches { \r matches carriage return \} matches } \t matches horizontal tab \\ matches \ \v matches vertical tab \[ matches [ \? matches ? \] matches ] \* matches * \( matches ( \+ matches + \) matches ) \. matches . \xxx matches the ASCII character expressed by the octal number xxx. \050 matches " \xdd matches the ASCII character expressed by the hex number dd. \x28 matches " \uxxxx matches the unicode-character expressed by the UNICODE xxxx. \u00A3 matches £
Beispiel Escapen von RegExp-Zeichen ggf. gegen Codeinjektion bei Benutzereingaben
function escape_regexpr_Zeichen (str) { // $& meint den komplett erkannten String return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); }
Geklammerte (Unter-) Ausdrücke in RegExpr speichern gewöhnlich den geklammerten Ausdruck ("einfangende Ausdrücke").
Im folgenden Beispiel wird die erste geklammerte Zeichenfolgen (RegExp.$1) verwendet, um eine URL, wie "http://www.fh-giessen.de/~hg54/mmk/index.htm" zu untersuchen.
(\w+):\/\/([^/:]+)(:\d*)?([^# \r\n]*?)
Die geklammerten Unterausdrücke (von links nach rechts) entsprechen den RegExp.$1, RegExp.$2, RegExp.$3, usw. und liefern für "http://www.fh-giessen.de/~hg54/mmk/index.htm"
RegExp.$1=http RegExp.$2=www.fh-giessen.de RegExp.$3=/~hg54/mmk/index.htm
Es wird Durch
var str_neu = str.replace(/find/glob, repl);
Ersetze 'white char' durch 'X'
Vertausche 4-stellige und 5-stellige Zahlen
Verwende anstelle eines "replace-Strings" eine Funktion
Dieses Beispiel verwendet anstelle eines Ersetzungstrings (Repl-String) eine Funktion, der die gefundenen Strings übergeben werden und deren Rückgabestring dann der Ersetzungsstring ist.
function func(s) {return s.toLowerCase();} src = "AB Ab ÄB"; re = new RegExp("AB","gi"); src = new String(src).replace(re, func); document.write("src = "+src);
Der folgende RegExpr kann zur Browser-Identifizierung dienen.
^Mozilla[^(]*\([C|c]ompatible;\s*MSIE (?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))(?'extra'[^)]*)
Hinweis auf regex101.com für das Experimentieren mit Regulären Ausdrücken . PHP-Funktionen (Beispiele):
mixed preg_replace(mixed $pattern, mixed $replacement, mixed $subject[,int $limit[,int &$count]] ) mixed str_replace(mixed $search, mixed $replace, mixed $subject[,int &$count] )
Spezielle Zeichen-Definitionen (Meta-Charakter):
\ Quote the next metacharacter ^ Match the beginning of the line . Match any character (except newline) $ Match the end of the line (or before newline at the end) | Alternation () Grouping [] Character class * Match 0 or more times + Match 1 or more times ? Match 1 or 0 times {n} Match exactly n times {n,} Match at least n times {n,m} Match at least n but not more than m times More Special Character Stuff \t tab (HT, TAB) \n newline (LF, NL) \r return (CR) \f form feed (FF) \a alarm (bell) (BEL) \e escape (think troff) (ESC) \033 octal char (think of a PDP-11) \x1B hex char \c[ control char \l lowercase next char (think vi) \u uppercase next char (think vi) \L lowercase till \E (think vi) \U uppercase till \E (think vi) \E end case modification (think vi) \Q quote (disable) pattern metacharacters till \E Even More Special Characters \w Match a "word" character (alphanumeric plus "_") \W Match a non-word character \s Match a whitespace character \S Match a non-whitespace character \d Match a digit character \D Match a non-digit character \b Match a word boundary \B Match a non-(word boundary) \A Match only at beginning of string \Z Match only at end of string, or before newline at the end \z Match only at end of string \G Match only where previous m//g left off (works only with /g)