如何匹配子串的多次出现

gb2*_*b2d 11 regex

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

<div><p>£20<span class="abc" /><span class="def">56</span></p></div>
Run Code Online (Sandbox Code Playgroud)

我想要的文字:

20<span class="abc" /><span class="def">56
Run Code Online (Sandbox Code Playgroud)

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

str.match(/\d*<[^>]*>\d*/)
Run Code Online (Sandbox Code Playgroud)

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

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

Jam*_*urz 6

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

str.match(/your_expression_here/g)
                                ^
Run Code Online (Sandbox Code Playgroud)

  • 这不是回答他的问题. (4认同)

Jos*_*das 6

/g如果要匹配多个出现的子字符串,添加是不够的。如果是这种情况,可以按照此处所述使用不情愿的量词。

鉴于字符串:

<div><p>£20<span class="abc" /><span class="def">56</span></p></div>
Run Code Online (Sandbox Code Playgroud)

您将使用以下方法获得您想要的文本:

\d+.*>\d+
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

您不会多次找到目标选择。由于.*. 要使.*非贪婪或不情愿,只需在?之后添加一个*,您将获得:

\d+.*?>\d+
Run Code Online (Sandbox Code Playgroud)

这将找到您要求的子字符串的两次出现,如下所示