How to match multiple occurrences of a substring

后端 未结 3 754
逝去的感伤
逝去的感伤 2020-11-22 17:00

If I have an HTML string such as:

£2056

<
相关标签:
3条回答
  • 2020-11-22 17:26

    To match multiple times use to need use the global option

    str.match(/your_expression_here/g)
                                    ^
    
    0 讨论(0)
  • 2020-11-22 17:26

    Adding /g isn't enough if you with to match multiple occurrences of a substring. If that's the case reluctant quantifiers may be used as described here.

    Given the string:

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

    You will arrive at the text you wanted using:

    \d+.*>\d+
    

    But given the same string repeated two times:

    <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>
    

    You will not find the target selection multiple times. You'll only find it once due to the greedy nature of .*. To make .* non-greedy, or reluctant, simply add a ? after the * and you will arrive at:

    \d+.*?>\d+
    

    Which will find both occurrences of the substring you asked for as shown here.

    0 讨论(0)
  • 2020-11-22 17:29

    Just allow the group to be repeated: (?:...)+ means "Match ... 1 or more times:

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

    As per Alan Moore's suggestion, I've also changed the \d* into \d+, making the numbers required instead of optional.

    0 讨论(0)
提交回复
热议问题