2017-11-08 1 views
1

Ich habe folgende Stück HTML-Code mit universellen Selektor im Stil-Tag aufgetreten.Javascript - Regex zu universellen Selektor (*) in einem mehrzeiligen Stil Tag

<html> 
<head> 
<style> 
* { 
font-family:Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; 
} 
</style> 
</head> 
<body>...</body> 
</html> 

Ich bin auf der Suche nach einem effizienten Regex für den universellen Selektor. Ich habe /<style>↵\* {.*?<\/style>/g verwendet, aber ohne Erfolg. Das Problem ist, dass es eine mehrzeilige Zeichenkette ist und es scheint nicht mit mehrzeiligen Zeichenketten zu funktionieren.

+0

Versuchen Sie '\ n' anstelle von' ↵'. –

+1

Erklären Sie auch, warum Sie das tun wollen. – Tomalak

+0

Richtiger Weg zum Parsen von HTML ist HTML Parser nicht Regex.In sehr begrenztem Umfang kann Regex hilfreich sein, aber es ist schlecht für Wartbarkeit, da HTML komplexer als das im Laufe der Zeit werden – DanteTheSmith

Antwort

1

Dies ist eine bessere regex:

/([*]\s*{[^}]*})/gm 

Es entspricht dem Universal-Selektor, die Konsolen und alles dazwischen. Es funktioniert auch, wenn andere Regeln zwischen den Skript-Tags vorhanden sind.

  • [*] ein Litteral Sterne
  • \s* jeder Leerzeichen
  • {[^}]*} eine öffnende Klammer, alles andere als ein schließenden Klammer, einem Schließbügel
+0

Das ist perfekt für meinen Anwendungsfall. Danke für Ihre Hilfe ! – akhilesh

0

Richtiger Weg zum Parsen von HTML ist HTML-Parser (wie DOMParser()) nicht regex. In sehr begrenztem Umfang kann Regex hilfreich sein, aber es ist schlecht für die Wartbarkeit, da HTML im Laufe der Zeit komplexer werden kann und keine einfache Sprache ist, die regex-analysiert werden kann.

aber sagen, dass in diesem Fall, wenn Format ist genau das, wie starrte Sie dies den Trick von Anpassungs tun:

/<style>\n\*\s{\n(\s|.)*\n}\n<\/style>/gm 

Lassen Sie uns es brechen:

  • <style> - offensichtlich braucht es Um mit diesem Literal zu beginnen
  • \n\*\s{\n neue Zeile, Zeichen *, Leerzeichen, Zeichen {und neue Zeile
  • (\s|.)* - Capture-Gruppe, die entweder Leerzeichen oder Zeichen (0 oder mehr davon) erfaßt - im Grunde Sie den gewünschten Text
  • \n - Ende dieser Capture-Gruppe ist es, neue Linie
  • }\n - Zeichen} und Zeilenende
  • <\/style> - muss natürlich mit diesem wörtlichen beenden (Geist,/hat entgangen sein)

ich kann Ihnen robusten regex bauen, aber für eine robuste Lösung, wie ich schon gesagt: HTML-Parser ist ein Weg zu gehen!

+0

Mein Anwendungsfall ist ein bisschen anders. Schätze deine Hilfe aber! – akhilesh

0

Sie auch

/<style((.|\n|\r)*?)<\/style>/g Diese Regex versuchen kann

getestet http://www.gethifi.com/tools/regex

+0

Ihre Lösung funktioniert. Vielen Dank ! – akhilesh

+0

Wenn diese Antwort für Sie hilfreich ist, markieren Sie sie bitte als Antwort, damit sie für andere hilfreich ist – Znaneswar

Verwandte Themen