javascript - 按群组

时间:2018-02-27 15:28:18

标签: javascript php regex

我有这种HTML结构:

<p>TEST</p><ul><li>1 abc</li><li>2 def</li><li>3 ghi</li></ul>

我希望得到这个:

 - Group 1 : TEST 
 - Group 2 : 1 abc 
 - Group 3 : 2 def  
 - Group 4 : 3 ghi

所以我写了这个reg exp:

<p>(.*?)<\/p>.*?<ul>(?(1)<li>(.*?)<\/li>*)<\/ul>

结果是:

Match 1
Full match  0-50    `<p>TEST</p><ul><li>1</li><li>2</li><li>3</li></ul>`
Group 1.    3-7 `TEST`
Group 2.    19-40   `1</li><li>2</li><li>3`

Cf Regex101:https://regex101.com/r/eoHtuI/1

这是用PHP格式编写的,但我也可以将它与Javascript一起使用。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以拆分每个标签序列(无论如何为您的样本输入)。

代码:(Demo

$html=<<<HTML
<p>TEST</p><ul><li>1</li><li>2</li><li>3</li></ul>
HTML;

var_export(preg_split('~(?:<[^>]+>)+~',$html,NULL,PREG_SPLIT_NO_EMPTY));

输出:

array (
  0 => 'TEST',
  1 => '1',
  2 => '2',
  3 => '3',
)

*注意,不建议使用正则表达式解析html。这是一个DomDocument / Xpath方法(主要来自https://stackoverflow.com/a/25695410/2943403

代码:(Demo

$dom=new DOMDocument; 
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->evaluate('//*[count(*) = 0]') as $node) {
  $result[]=$node->nodeValue;
}
var_export($result);  // same output as my regex method