2016-03-01 2 views
0

Я хотел бы удалить withe пробелы или новые строки из строки, которая исходит из предложения html. Пример: позволяет взять следующий снабжать струной, тетивой и т.п.Regex - Как удалить пробелы и новые строки в HTML-коде?

<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate">  
<li class="list-group-item active"> 
    <a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i> Overall</a> 
</li> 
<li class="list-group-item list-toggle"> 
    <a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i> Invoice</a> 
    <ul id="collapse-MoneyManage" class="collapse"> 
     <li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i> Big Invoice </a></li> 
     <li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i> Big big big 

Invoice 2 </a></li> 
    </ul> 
</li> 
</ul> 

Это желаемый результат:

<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate"><li class="list-group-item active"><a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i>Overall</a></li><li class="list-group-item list-toggle"><a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i> Invoice</a><ul id="collapse-MoneyManage" class="collapse"><li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i>Big Invoice</a></li><li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i>Big big big Invoice 2</a></li></ul></li></ul> 

Как вы можете видеть:

  1. всего 1 линия, ни Withe пробелы или новые строки между "> <", если между ними нет строки.
  2. Я хотел бы иметь обрезанные строки между «> <», если есть некоторые. Пример: </i> Big Invoice </a> стал </i>Big Invoice</a>.
  3. И наконец

    </i> Big big big
    Invoice 2 </a></li>

стал </i>Big big big Invoice 2</a></li>, никакой новой строки в середине предложения и обрезается.

До сих пор я достиг первого шага. Это regex Я использовал (>\s+<), но я не знаю, как достичь шага 2 и 3. Возможно ли это? Есть идеи?


Update: После поста Адама, это окончательный код:

// Поместите свой HTML код здесь. Не используйте двойные кавычки "внутри него. Вместо этого используйте сингл.

$str =<<<eof 

     your dynamic HTML here. 

eof; 

$re = "/(?:\\s*([<>])\\s*|(\\s)\\s*)/im"; 
$subst = "$1$2"; 
$result = preg_replace($re, $subst, $str); 

//If you want to use JSON 
$arrToJSON = array(
    "dataPHPtoJs"=>"yourData", 
    "htmlDyn"=>"$result"  
    ); 
$resultJSON= json_encode(array($arrToJSON)); 

Этого HTML строка чиста. Таким образом, вы можете использовать его корыто AJAX, JSON, внутри JavaScript, который будет работа.

I моих . случай я использую внутри яваскрипта кода, не AJAX, не JSON

var htmlDyn="<?php echo $result; ?>"; 
//Do what you want to do with. 
$('.someElementClass').append(htmlDyn); 
+0

Что LAN вы используете? – Shafizadeh

+1

[Вы не можете разобрать произвольный HTML с Regex] (http://stackoverflow.com/a/1732454/222364). Ваш код вероятно * неправильно * сбрасывает ' 'to' '. Вам нужно найти подходящий HTML-парсер для любого языка, с которым вы работаете. Вероятно, уже есть что-то, что делает то, что вы хотите, называемое * HTML Minifier *. (И кажется, что мои примеры также сворачивают пробелы ... В первом случае должно быть 5 пробелов) –

ответ

0

Некоторые преобразования XML, если вы пожалуйста?
Следующий фрагмент находится в PHP, но может быть легко преобразован для работы с i.e Python.

<?php 
$string = <<<EOF 
<html> 
<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate">  
<li class="list-group-item active"> 
    <a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i> Overall</a> 
</li> 
<li class="list-group-item list-toggle"> 
    <a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i> Invoice</a> 
    <ul id="collapse-MoneyManage" class="collapse"> 
     <li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i> Big Invoice </a></li> 
     <li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i> Big big big 

Invoice 2 </a></li> 
    </ul> 
</li> 
</ul> 
</html> 
EOF; 

$xml = simplexml_load_string($string); 

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = false; 
$dom->loadXML($xml->asXML()); 

echo $dom->saveXML(); 
/* output: 
<html><ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate"><li class="list-group-item active"><a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"/> Overall</a></li><li class="list-group-item list-toggle"><a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage"><i class="fa fa-money"/> Invoice</a><ul id="collapse-MoneyManage" class="collapse"><li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"/> Big Invoice </a></li><li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"/> Big big big 

Invoice 2 </a></li></ul></li></ul></html> 
*/ 
?> 

Устраняет все ненужные пробелы и безопаснее затем using regular expressions on HTML tags.

0

Это позволит обрезать пробелы, смежные с тегами, и удалить новые строки в середине содержимого.

Поиск:

(?:\s*(<(?:(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:(?:(?:"[\S\s]*?")|(?:'[\S\s]*?'))|(?:[^>]*?))+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>)\s*|(?:\r?\n)+) 

Заменить:

$1 

Выход:

<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate"><li class="list-group-item active"><a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i>Overall</a></li><li class="list-group-item list-toggle"><a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i>Invoice</a><ul id="collapse-MoneyManage" class="collapse"><li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i>Big Invoice</a></li><li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i>Big big big Invoice 2</a></li></ul></li></ul> 

Benchmark:

Regex1: (?:\s*(<(?:(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:(?:(?:"[\S\s]*?")|(?:'[\S\s]*?'))|(?:[^>]*?))+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>)\s*|(?:\r?\n)+) 
Options: <none> 
Completed iterations: 50/50  (x 1000) 
Matches found per iteration: 29 
Elapsed Time: 6.75 s, 6749.58 ms, 6749576 µs 
Смежные вопросы