2017-11-01 3 views
1

Ich möchte alle externen Ressourcen in der CSS übereinstimmen. Zum Beispiel enthält die content 2 Ressourcen wie //cdn.com/roboto-regular.eot und //cdn.com/roboto-bold.eot.nicht gierigen regulären Ausdruck für Javascipt

var reg = /\/\/.*\.(js|css|jpg|eot)[^\/\/]/ig; 

var content="url(//cdn.com/roboto-regular.eot);src:url(//cdn.com/roboto-bold.eot#iefix)"; 

while ((match = reg.exec(content)) != null) console.log('match', match); 

Aber die Expression zu "//cdn.com/roboto-regular.eot);src:url(//cdn.com/roboto-bold.eot#"

Wie kann ich den Ausdruck nicht gierig, so dass ich jedes Spiel zu bekommen?

Antwort

0

Sie könnten einige Zeichen aus der Liste der passenden Zeichen ausschließen  :

var reg = /\/\/[^)(]*\.(js|css|jpg|eot)/ig; 
 
var content="url(//cdn.com/roboto-regular.eot);src:url(//cdn.com/roboto-bold.eot#iefix)"; 
 
while ((match = reg.exec(content)) != null) console.log('match', match);

[^)(] bedeutet everything except ")" and "(".

+0

können nicht-einfangende Gruppe verwenden: '(?: Js | CSS | jpg | EOT)', zu Vermeiden Sie unnötige Aufnahmen. –

+0

Ich weiß @AshishRanjan, aber wer sagte, dass es unnötig ist :-P – leaf

0

Machen Sie die .* Menge in Ihrem Regex faul (oder nicht gierig).

Ich denke, das einzige Problem hier ist, dass .* alles vom Beginn des ersten Spiels bis zum Ende des letzten Spiels verbraucht.

var reg = /\/\/.*?\.(?:js|css|jpg|eot)[^\/\/]/ig; 
 

 
var content="The quick brown fox jumps over the lazy dog. \n url(//cdn.com/roboto-regular.eot); some more stuff here src:url(//cdn.com/roboto-bold.eot#iefix)"; 
 

 
while ((match = reg.exec(content)) != null) console.log('match', match);

Ausgang:

match //cdn.com/roboto-regular.eot),eot 
match //cdn.com/roboto-bold.eot#,eot 

Demo

+0

kann nicht-einfangende Gruppe verwenden: '(?: Js | css | jpg | eot)', um unnötige Erfassung zu vermeiden. –