如何匹配子字符串的多个匹配项

How to match multiple occurrences of a substring

提问人:gbro3n 提问时间:8/12/2011 最后编辑:vhsgbro3n 更新时间:10/2/2022 访问量:46270

问:

如果我有一个 HTML 字符串,例如:

<div><p>£20<span class="abc" /><span class="def">56</span></p></div>

我想要文字:

20<span class="abc" /><span class="def">56

如何定义正则表达式以多次匹配目标部分。到目前为止,我有:

str.match(/\d*<[^>]*>\d*/)

但这只会返回第一个数字部分20<span class="abc" />

我需要它灵活地匹配多个标签/数字部分,同时修剪字符串中第一个/最后一个数字的前导或尾随的任何内容。

正则表达式

评论


答:

8赞 James Kyburz 8/12/2011 #1

要多次匹配,请使用全局选项

str.match(/your_expression_here/g)
                                ^
1赞 Tim Pietzcker 8/12/2011 #2

只需允许该组重复:表示“匹配 1 次或更多次:(?:...)+...

str.match(/\d+(?:<[^>]*>)+\d+/)

根据 Alan Moore 的建议,我还将 改为 ,使数字成为必需的而不是可选的。\d*\d+

评论

0赞 Alan Moore 8/13/2011
当你在做的时候,把每个都改成;那一定是个错误。\d*\d+
9赞 vhs 1/3/2019 #3

如果您希望匹配多个子字符串,则仅添加是不够的。如果是这种情况,可以按照本文所述使用不情愿的量词。/g

给定字符串:

<div><p>£20<span class="abc" /><span class="def">56</span></p></div>

您将到达您想要使用的文本:

\d+.*>\d+

但是给定相同的字符串重复两次:

<div><p>£20<span class="abc" /><span class="def">56</span></p></div><div><p>£20<span class="abc" /><span class="def">56</span></p></div>

您不会多次找到目标选择。由于 .为了不贪婪或不情愿,只需在 后面添加一个,你就会得到:.*.*?*

\d+.*?>\d+

这将找到您请求的子字符串的两个匹配项,如下所示