如何匹配子字符串的多次出现

如果我有一个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" />


我需要灵活地匹配多个标记/数字部分,同时修剪字符串中开头/结尾的任何数字。


不负相思意
浏览 264回答 3
3回答

aluckdog

要多次匹配,需要使用全局选项str.match(/your_expression_here/g)

慕雪6442864

/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+它将找到您要求的子字符串的两次出现,如下所示。

蝴蝶刀刀

只需允许重复该组即可:(?:...)+表示“匹配...1次或多次:str.match(/\d+(?:<[^>]*>)+\d+/)根据Alan Moore的建议,我也将更改为,使所需的数字\d*变为\d+可选的数字。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java