正则表达式匹配HTML span标记中包含的多个单词

时间:2016-03-22 10:18:13

标签: javascript html regex

我正在使用正则表达式来匹配HTML字符串中的短语。例如,我想查找“人工智能”的每个实例,并返回紧接其前面的<span>标记。

我遇到的麻烦是我的正则表达式只返回一个大的匹配。

以下是我一直在使用的在线正则表达式构建器的链接:https://regex101.com/r/rK9yO9/1

我希望返回以下两场比赛:

<span m='3'>
<span m='13'>

示例字符串:

<p><span m='2'>of</span> <span m='3'>artificial</span> 
<span m='4'>intelligence.</span><span m='4'>So</span> 
<span m='5'>that</span> <span m='6'>seems</span> 
<span m='9'>good.</span> <span m='10'>The</span> 
<span m='11'>impact</span> <span m='12'>of</span> 
<span m='13'>artificial</span> <span m='14'>intelligence,</span> 
<span m='15'>on</span> </p>

N.b文本中没有换行符,为了便于阅读,我添加了这些换行符。

我到目前为止的正则表达式是:

(<span.*>)artificial.?<\/span>.?<span.*>intelligence.?<\/span>

返回以下匹配项:

<span m='2'>of</span> <span m='3'>artificial</span> 
<span m='4'>intelligence.</span><span m='4'>So</span> 
<span m='5'>that</span> <span m='6'>seems</span> 
<span m='9'>good.</span> <span m='10'>The</span> 
<span m='11'>impact</span> <span m='12'>of</span> 
<span m='13'>artificial</span> <span m='14'>intelligence,</span>

2 个答案:

答案 0 :(得分:2)

你正在使用贪婪的正则表达式。要在第一次出现时停止匹配吗?

(<span.*?>)artificial.?<\/span>.?<span.*?>intelligence.?<\/span>

将匹配

'<span m='2'>of</span> <span m='3'>artificial</span> <span m='4'>intelligence.</span>'

您可以轻松获得匹配的第一组

答案 1 :(得分:1)

试试这个正则表达式:

 /(<span[^<]+?>(?:artificial|intelligenc\.)<\/span>)/gm

请参阅DEMO

它应该只匹配选定的标签