如何使正则表达式部分“向后懒惰”?

时间:2017-07-27 13:34:56

标签: javascript regex

为可怕的标题道歉,我不知道如何以简短的形式表达这一点。

我有一个包含html的字符串(文本,一些span和一些<br> s)。 我想要实现的是找到第一个span,其结尾为“-focused”。为了增加乐趣,spantitle属性中有换行符。然而,他们确实有一个固定的结构,我可以根据需要重新安排它们。 这就是我到目前为止所做的:

 <span[\s\S]*?class=".*-focused"[\s\S]*?>[\s\S]*?<\/span>

但是从第一个跨度开始到匹配跨度结束我得到一个匹配。 这是一个regex101链接来说明(包含示例文本)

https://regex101.com/r/W7YDU5/2

我尝试使用正/负前瞻和捕获/非捕获组,但此时我比任何事情都更困惑。

2 个答案:

答案 0 :(得分:1)

您应该避免在这里使用第一个[\s\S]。为了得到你需要的东西,你可能想要在同一个开始标记内进行。在匹配除>之外的所有内容时,这是隐式完成的:

<span[^>]*?class=".*-focused"[^>]*?>[\s\S]*?<\/span>

答案 1 :(得分:-1)

document.querySelector('span[class=$-focused]')

这应该找到第一个span,其中一个类以-focused

结尾