HTML 正则表达式选择器



>我正在尝试为 HTML 制作一个正则表达式,由于某种原因,我想出了一些关于要选择的标题 html 块和标题的小问题,

为了更好地解释它:

<h5>Thing</h5>都会被选中,但我只想选择<h5></h5>,这与<title>Test</title>我只想选择 html 标签,但它选择了整个事情,

这是我到目前为止的正则表达式:

/(</(w+)>)|(<(w+)).+?(?=>)>|(<(w+))>/ig

你的问题在这里:<(w+).+?(?=>)>

这说:

  1. 打开尖括号
  2. 使用尽可能多的单词字符(最少 1 个)
  3. 使用尽可能少的字符(最小 1)
  4. 确保后面有一个右尖括号
  5. 使用右尖括号

首先,第 4 步是多余的;你知道接下来会有一个右括号,否则第 5 步将无法匹配。

但更大的问题是第3步。让我们看看<h5>Thing</h5>会发生什么:

  1. <
  2. h5(因为>不再是一个单词字符)
  3. >Thing</h5,因为这是右尖括号之前的最小匹配量(请记住,此处匹配 0 个字符不是一个选项)
  4. 确保接下来是>
  5. >

无论如何,在简单的情况下,您想要的可以通过/</?.+?>/来完成。如果属性的值包含大于符号:<div title="a>b"> ,则会中断。避免这种情况是可能的,但它使正则表达式更加复杂,有点像这样(但我可能忘记了一些东西):

<w+(?:s+w+(?:=(?:"[^"]*"|'[^']*'|[^'"][^s>]*)?)?)*s*>|</w+>

最新更新