提问人:gbro3n 提问时间:8/12/2011 最后编辑:vhsgbro3n 更新时间:10/2/2022 访问量:46270
如何匹配子字符串的多个匹配项
How to match multiple occurrences of a substring
问:
如果我有一个 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+
这将找到您请求的子字符串的两个匹配项,如下所示。
评论