javascript-按组查找RegExp中的多个事件
我得到了这种HTML结构:javascript-按组查找RegExp中的多个事件,javascript,php,regex,Javascript,Php,Regex,我得到了这种HTML结构: <p>TEST</p><ul><li>1 abc</li><li>2 def</li><li>3 ghi</li></ul> 所以我写了一个reg exp: <p>(.*?)<\/p>.*?<ul>(?(1)<li>(.*?)<\/li>*)<\/ul> (.*).*(?(1
<p>TEST</p><ul><li>1 abc</li><li>2 def</li><li>3 ghi</li></ul>
所以我写了一个reg exp:
<p>(.*?)<\/p>.*?<ul>(?(1)<li>(.*?)<\/li>*)<\/ul>
(.*).*(?(1)(.*))
结果是:
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`
匹配1
完全匹配0-50`测试- 1
- 2
- 3
`
第一组。3-7 `测试`
第2组。19-40'12 3`
Cf Regex101:
这是用PHP格式编写的,但我也可以将其与Javascript一起使用。
有什么想法吗?您可以对每个标签序列进行拆分(无论如何,对于您的示例输入) 代码:() *注意,不建议使用正则表达式解析html。下面是一个DomDocument/Xpath方法(主要来自) 代码:()
你必须使用正则表达式吗?DOM解析似乎更适合这个任务。我用它做了一个web垃圾,由于我的web hoster,我不能添加任何模块,所以我必须使用正则表达式。顺便说一句,我也知道我可以使用多个正则表达式,但我正试图用一个正则表达式来完成所有工作,以获得更快的代码。如果这不能满足您所有的用例,您需要改进您的问题并添加更多的示例输入。
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`
$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',
)
$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