如果我有一个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" />
我需要灵活地匹配多个标签/数字部分,同时修剪前导或尾随字符串中第一个/最后一个数字的任何内容。
答案 0 :(得分:5)
要多次匹配,请使用全局选项
str.match(/your_expression_here/g)
^
答案 1 :(得分:1)
仅添加/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+
将以proven here的形式找到您要求的两个子串。
答案 2 :(得分:0)
只允许重复群组:(?:...)+
表示“匹配...
1次或更多次:
str.match(/\d+(?:<[^>]*>)+\d+/)
根据Alan Moore的建议,我还将\d*
更改为\d+
,使得所需的数字不是可选的。