Как получить стиль = "Я хочу код CSS" с помощью регулярных выражений (JavaScript) - PullRequest
2 голосов
/ 30 августа 2010
var text = '..<anything><anything style="color:red;">hello</anything><anything style="color:blue; font-size:1em;">hello</anything></anything>...';

или

var text = "..<anything><anything style='color:red;'>hello</anything><anything style='color:blue; font-size:1em;'>hello</anything></anything>...";

результат:

array[0] = "color:red;";
array[1] = "color:blue; font-size:1em;";

Ответы [ 3 ]

3 голосов
/ 30 августа 2010

Создайте временный элемент и используйте innerHTML, затем getElementsByTagName и getAttribute('style'), если это такая строка.

Если это ссылка на элемент DOM, пропустите часть innerHTML.

var d = document.createElement('div'), 
    text = '..<anything><anything style="color:red;">hello</anything><anything style="color:blue; font-size:1em;">hello</anything></anything>...', 
    styles = [];
    d.innerHTML=text;
    var els = d.getElementsByTagName('*');
    for ( var i = els.length; i--; ) {  
        if ( els[i].getAttribute('style') ) { 
           styles.push(  els[i].getAttribute('style')  )
        }
    }
    styles

JQuery будет ..

$(text).find('*').map(function() { return this.getAttribute('style') })
2 голосов
/ 30 августа 2010

Как уже упоминалось, использование синтаксических регулярных выражений для синтаксического анализа HTML не является хорошей идеей.

Однако, если вы решили сделать это таким образом, это сделает вашу работу за вас:

var matches = text.match(/\bstyle=(['"])(.*?)\1/gi);
var styles = [];
for(var i = 0; i < matches.length; i++) {
    styles.push(matches[i].substring(7, matches[i].length - 1));
}
0 голосов
/ 30 августа 2010

meder уже дал правильный ответ, но так как решение для регулярных выражений было желательным, я дам его.Применяются все обычные предупреждения о разборе нерегулярного языка, такого как HTML (или SGML, или XML) с регулярными выражениями.

/<[a-z]+(?:\s+ [a-z]+\s*=\s*(?:[^\s"']*|"[^"]*"|'[^']*'))\s+style\s*=\s*"([^"]*)">/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...