XRegExp 0.2:Nyní s názvem Capture

Aktualizace: Tato verze XRegExp je zastaralá. Viz XRegExp.com pro nejnovější, nejlepší verzi.

Regulární výraz JavaScriptu nepodporuje pojmenované zachycení. No, říká kdo? XRegExp 0.2 přináší podporu pojmenovaného snímání spolu s několika dalšími novými funkcemi. Ale za prvé, pokud jste neviděli předchozí verzi, nezapomeňte se podívat na můj příspěvek na XRegExp 0.1, protože ne všechna dokumentace se níže opakuje.

Důležité

  • Komplexní podpora pojmenovaného snímání (Novinka)
  • Podporuje literály regulárních výrazů prostřednictvím addFlags metoda (Nová)
  • Režim volných mezer a komentářů (x )
  • Tečka odpovídá všem režimům (s )
  • Několik dalších drobných vylepšení oproti verzi 0.1

Pojmenované zachycení

Ve volné přírodě existuje několik různých syntaxí pro pojmenované zachycení. Následující tabulku jsem sestavil na základě mého pochopení podpory regulárních výrazů příslušných knihoven. Syntaxe XRegExp je uvedena nahoře.

Knihovna Zachytit Zpětreference Nahrazuje Uloženo na
XRegExp (<name>…) \k<name> ${name} result.name
.NET (?<name>…) (?'name'…) \k<name> \k'name' ${name} Matcher.Groups('name')
Perl 5.10 (beta) (?<name>…) (?'name'…) \k<name> \k'name' \g{name} $+{name} $+{name}
Python (?P<name>…) (?P=name) \g<name> result.group('name')
PHP preg (PCRE 7) (styly .NET, Perl a Python) $regs['name'] $result['name']

Žádná jiná hlavní knihovna regulárních výrazů v současné době nepodporuje pojmenované zachycení, ačkoliv jádro JGsoft (používané produkty jako RegexBuddy) podporuje syntaxi .NET i Pythonu. XRegExp nepoužívá otazník na začátku pojmenované zachytávací skupiny, protože by to zabránilo jeho použití v literálech regulárního výrazu (JavaScript by okamžitě vyvolal chybu „neplatný kvantifikátor“).

XRegExp podporuje pojmenované zachycení na vyžádání. Podporu pojmenovaného zachytávání můžete přidat do libovolného regulárního výrazu pomocí nového „k " příznak. Děje se tak z důvodů kompatibility a aby se zajistilo, že čas kompilace regulárních výrazů zůstane ve všech situacích co nejrychlejší.

Následuje několik příkladů použití pojmenovaného zachycení:

// Add named capture support using the XRegExp constructor
var repeatedWords = new XRegExp("\\b (<word> \\w+ ) \\s+ \\k<word> \\b", "gixk");

// Add named capture support using RegExp, after overriding the native constructor
XRegExp.overrideNative();
var repeatedWords = new RegExp("\\b (<word> \\w+ ) \\s+ \\k<word> \\b", "gixk");

// Add named capture support to a regex literal
var repeatedWords = /\b (<word> \w+ ) \s+ \k<word> \b/.addFlags("gixk");

var data = "The the test data.";

// Check if data contains repeated words
var hasDuplicates = repeatedWords.test(data);
// hasDuplicates: true

// Use the regex to remove repeated words
var output = data.replace(repeatedWords, "${word}");
// output: "The test data."

Ve výše uvedeném kódu jsem také použil x příznak poskytnutý XRegExp, pro zlepšení čitelnosti. Všimněte si, že addFlags metodu lze volat vícekrát na stejný regulární výraz (např. /pattern/g.addFlags("k").addFlags("s") ), ale pro efektivitu bych doporučoval přidat všechny vlajky najednou.

Zde je několik dalších příkladů použití pojmenovaného zachycení s příliš zjednodušeným regulárním výrazem pro shodu adresy URL (pro komplexní analýzu adresy URL viz parseUri):

var url = "http://microsoft.com/path/to/file?q=1";
var urlParser = new XRegExp("^(<protocol>[^:/?]+)://(<host>[^/?]*)(<path>[^?]*)\\?(<query>.*)", "k");
var parts = urlParser.exec(url);
/* The result:
parts.protocol: "http"
parts.host: "microsoft.com"
parts.path: "/path/to/file"
parts.query: "q=1" */

// Named backreferences are also available in replace() callback functions as properties of the first argument
var newUrl = url.replace(urlParser, function(match){
	return match.replace(match.host, "yahoo.com");
});
// newUrl: "http://yahoo.com/path/to/file?q=1"

Všimněte si, že funkce pojmenovaného snímání XRegExp nepodporuje zastaralé funkce JavaScriptu včetně lastMatch vlastnost globální RegExp objekt a RegExp.prototype.compile() metoda.

Jednořádkový (s) a rozšířený (x) režim

Další nenativní příznaky, které XRegExp podporuje, jsou s (jeden řádek) pro režim „tečka odpovídá všem“ a x (rozšířené) pro režim „volné mezery a komentáře“. Úplné podrobnosti o těchto modifikátorech najdete v FAQ v mém příspěvku XRegExp 0.1. Jeden rozdíl od předchozí verze je však v tom, že XRegExp 0.2 při použití x flag, nyní povoluje mezery mezi tokenem regulárního výrazu a jeho kvantifikátorem (kvantifikátory jsou např. + , *? nebo {1,3} ). Přestože bylo zdokumentováno zacházení/omezení předchozí verze v tomto ohledu, bylo atypické ve srovnání s jinými knihovnami regulárních výrazů. Toto bylo opraveno.

Stáhnout

XRegExp 0.2.5 .

XRegExp byl testován v IE 5.5–7, Firefox 2.0.0.4, Opera 9.21, Safari 3.0.2 beta pro Windows a Swift 0.2.

Nakonec si všimněte, že XRE objekt z verze 0.1 byl odstraněn. XRegExp nyní vytváří pouze jednu globální proměnnou:XRegExp . Chcete-li trvale přepsat nativní RegExp konstruktor/objekt, nyní můžete spustit XRegExp.overrideNative();

Aktualizace: Tato verze XRegExp je zastaralá. Viz XRegExp.com pro nejnovější, nejlepší verzi.