RegEx -匹配HTML字符串中的空间


RegEx - matching space in HTML string?

要从所见即所得编辑器中过滤用户输入,我试图找到以下字符串:

<p>&nbsp;</p>
<p> </p>
<p></p>

这是我目前使用的正则表达式:

/'<p'>([nbsp';]*|['s]*|[ ]*)'<'/p'>/i

我对RegEx很陌生,但据我所知,这:

  1. '<p'>: -完全匹配<p>,则
  2. ( -匹配:
    • [nbsp';]* -"nbsp;"精确,任意次数
    • |['s]* -或任何空格字符,任意次数
    • |[ ]* -或" "(空格),任意次数
  3. <'/p'> -完全匹配</p>

但是,这个表达式只匹配 <p>nbsp;</p>,而不匹配其他两个。

我也试过了:

/'<p'>[nbsp';|'s| ]*'<'/p'>/i

我正在测试它使用RegEx101.com(第一个表达式,第二个表达式)

我怎样才能使它工作?

你不能在字符类中使用"whole words",下面这些就足够了…

~<p>(?:&nbsp;|'s)*</p>~i

注意:您不需要包括<space>, 's令牌将匹配空白,您不需要转义<>,它们不被认为是特殊字符。

必须对多个匹配使用g修饰符。

/'<p'>([nbsp';|'s| ]*['s]*|)'<'/p'>/gi
https://regex101.com/r/zR9jY4/2

你忘了amp;

 /'<p'>[&nbsp';|'s| ]*'<'/p'>/i
在示例

<p>&nbsp;</p>
<p> </p>
<p></p>
<p> asdfas</p>

这将匹配前3

你不必用方括号。

/'<p'>(&nbsp;*|'s*)'<'/p'>/i